MysqlMySQL
MySQLinnodb_log_file_size
:多大才算太大?
在許多答案、討論和評論中,普遍的看法似乎是“將 innodb_log_file_size 設置為
inndb_buffer_pool_size
.相當大的緩衝池呢?例如,我有一台記憶體為 64GiB 的伺服器,而我的緩衝池目前為 38GiB。其中 25% 是 9.5GiB。使用“大”
innodb_log_file_size
而不是“太小”有什麼風險?有了 64GiB 可用,我可能會增加到
innodb_buffer_pool_size
大於 40GiB,甚至可能更高。有些事情讓我對 10GiB+ 的日誌文件大小感到緊張。我是否有不必要的擔心?
您必須在發生崩潰時的恢復時間與您的數據庫將支持多少寫入吞吐量之間找到正確的折衷。
Percona有一篇很棒的文章討論了與您類似的場景,使用 64GB 緩衝池,在文章的大約 2/5 處,您可以看到他在 2GB 和 15GB 日誌文件之間進行了很好的比較。
15GB 允許 innodb 有足夠的日誌空間來“平滑”地將頁面從日誌中刷新,而 2GB 則有更大的壓力來防止日誌被填滿,這最終會損害性能,因為頁面必須被驅逐。在他們引用的基準測試中,性能因此降低了 20%。
TL;DR 你真的不能用更大的日誌文件出錯,尤其是。如果您有一個在發生崩潰時可以故障轉移到的從屬設備,但是如果一個從屬設備太小,您肯定會損害性能。
簡短回答對於大多數伺服器來說,的值
innodb_log_file_size
並不重要。長答案
基準測試傾向於將伺服器壓力推到極限。如果你的應用程序壓力太大,它就會崩潰。
更好的衡量標準是
Uptime / 60 * innodb_log_file_size / Innodb_os_log_written
應該是大約 60(日誌輪換之間的分鐘)。翻轉它,這可以讓您粗略估計一個好處
innodb_log_file_size
:Innodb_os_log_written / (Uptime / 3600) / innodb_log_files_in_group
如果你偏離了 2 倍(甚至 5 倍),那也沒關係。