Mysql

innodb_flush_log_at_trx_commit = 1 是否比 innodb_flush_log_at_trx_commit = 2 對 SSD 的磨損更大?

  • November 26, 2016

我正在執行一個 Nextcloud 實例,當同步很多小文件時,我會遇到同步緩慢的問題。我發現這innodb_flush_log_at_trx_commit = 1是造成這種情況的原因,所以我被迫設置innodb_flush_log_at_trx_commit = 2. 現在我正在考慮將我的數據庫移動到 SSD。我想確認我確實遇到了訪問時間問題。

innodb_flush_log_at_trx_commit設置為時寫入磁碟的數據量是否與設置1為時相同2

你剛問

當 innodb_flush_log_at_trx_commit 設置為 1 時寫入磁碟的數據量是否與設置為 2 相同?

答案是肯定的,因為存在瓶頸。這個瓶頸在哪裡?

請查看 InnoDB 架構(由 Percona 首席技術官 Vadim Tkachenko 提供)

InnoDB 管道

請注意 InnoDB Memory Side 的右下角。這是日誌緩衝區。日誌資訊在哪裡刷新?查看 InnoDB 磁碟側的左下角。這是重做日誌。

為了提高 InnoDB 的寫入性能,請注意以下建議:

建議 #1

預設情況下,日誌緩衝區大小(大小為innodb_log_buffer_size)為8M (8388608).

請將innodb_log_buffer_size增加到64M.

建議 #2

預設情況下,重做日誌(大小為innodb_log_file_size)為48M (50331648).

請將innodb_log_file_size增加到1G.

如何實施

步驟 01:將這些選項添加到/etc/my.cnf(或my.ini用於 Windows)

[mysqld]
innodb_log_file_size=1G
innodb_log_buffer_size=64M

步驟02:登錄MySQL並執行

mysql> SET GLOBAL innodb_fast_shutdown = 0;

步驟 03:關閉 MySQL

service mysql stop

或以管理員身份從 Windows 命令行

C:\> net stop mysql

步驟 04:重命名重做日誌文件

mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak

或以管理員身份從 Windows 命令行

rename ib_logfile0 ib_logfile0.bak
rename ib_logfile1 ib_logfile1.bak

步驟 05:啟動 MySQL

service mysql start

或以管理員身份從 Windows 命令行

C:\> net start mysql

注意:此步驟可能需要 2-3 分鐘,因為它會創建兩個不同的日誌文件,每個文件 1G。

為什麼要更改這些設置?

當 SSD 對小型重做日誌執行隨機寫入時,磨損被本地化到磁碟的一部分。製作重做日誌會分散來自日誌緩衝區的寫入。使日誌緩衝區更大會降低寫入頻率,以換取要寫入的數據量增加。

如果整個 MySQL 實例位於 SSD 內,則必須進行這種調整,採用混合磁碟佈局(請參閱我的舊文章MySQL on SSD -有什麼缺點?)。

更多資訊

請閱讀有關優化 InnoDB 磁碟 I/O的 MySQL 文件以獲取更多 InnoDB 調整選項。

引用自:https://dba.stackexchange.com/questions/156330