討論 innodb_log_block_size 變量

jopen 10年前發布 | 12K 次閱讀 MySQL 數據庫服務器 InnoDB

這不是一篇獨創性的文章,但如果你對進一步了解 innodb_log_block_size 變量感興趣,或者你在ext4文件系統上使用SSD卡和/或InnoDB大日志文件,這篇文章為你而寫。

我以前會簡略的看一眼,但不會想太多,直到一天遇到了下面的一個錯誤日志:

InnoDB: Warning: innodb_log_block_size has been changed
from default value 512. (###EXPERIMENTAL### operation)

這讓我想進一步了解。

這個變量主要是改變事務日志記錄的大小,默認值512是夠用的。然而我發現在使用SSD卡時設置成4096是有好處的。(注意雖然可以設置成512或4096之外的值,目前只有這兩個值在使用中有意義。)

同時,如果你以innodb_flush_method=ALL_O_DIERECT方式運行ext4,4096是最好的設置(注意innodb_log_block_size和ALL_O_DIRECT都是XtraDB/XtraDB+特有的;閱讀:MariaDB和Percona server)。

什么是 ALL_O_DIRECT ?什么時候有用?

“ALL_O_DIRECT: 用 O_DIRECT 同時打開數據和日志文件, 用 fsync() 把數據文件沖掉而不是日志文件. 當InnoDB日志文件很大時 (大于8GB),建議使用,否則會導致性能下降.”

http://www.percona.com/…/innodb_io.html#innodb_flush_method

因此如果你在ext4上運行InnoDB日志文件 (8G+) , 你可能會考慮 ALL_O_DIRECT, 因為你在ext4上, 你應該設置innodb_log_block_size=4096, ext4里默認的log-block-size , 以避免不對齊的 AIO/DIO 警告.

同樣地, 如果你用SSD卡運行, 你也會希望看到innodb_log_block_size=4096 的性能提升。

如果感興趣, 這里有一些 innodb_log_block_size 的選項:

https://mariadb.com/…variables/#innodb_log_block_size
http://www.percona.com/…/innodb_io_55.html#innodb_log_block_size

希望這會有幫助。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!