MySQL 參數故事: innodb_flush_log_at_trx_commit

字號+ 編輯: 国内TP粉 修訂: 种花家 來源: 淘宝MySQL月报 2023-09-07 我要說兩句(0)

MySQL配置文档裡innodb_flush_log_at_trx_commit配置項目的詳解

背景

innodb_flush_log_at_trx_commit 這個參數可以說是InnoDB裡面最重要的參數之一,它控制了重做日志(redo log)的寫盤和落盤策略。 具體的參數意義見手冊

簡單說來,可選值的安全性從0->2->1遞增,分別對應於mysqld 進程crash可能丟失 -> OS crash可能丟失 -> 事務安全。

以上是路人皆知的故事,並且似乎板上釘釘,無可八卦。

innodb_use_global_flush_log_at_trx_commit

直到2010年的某一天,Percona的CTO Vadim同學覺得這種一刀切的風格不夠靈活,最好把這個變量設置成session級別,每個session自己控制。

但同時爲了保持Super權限對提交行爲的控制,同時增加了innodb_use_global_flush_log_at_trx_commit參數。 這兩個參數的配合邏輯爲:

1、若innodb_use_global_flush_log_at_trx_commit爲OFF,則使用session.innodb_flush_log_at_trx_commit;

2、若innodb_use_global_flush_log_at_trx_commit爲ON,則使用global .innodb_flush_log_at_trx_commit(此時session中仍能設置,但無效)

3、每個session新建時,以當前的global.innodb_flush_log_at_trx_commit 爲默認值。


業務應用

這個特性可以用在一些對表的重要性做等級定義的場景。比如同一個實例下,某些表數據有外部數據備份,或允許丟失部分事務的情況,對這些表的更新,可以設置 Session.innodb_flush_log_at_trx_commit爲非1值。


在阿裡雲RDS服務中,我們對數據可靠性和可用性要求更高,將 innodb_use_global_flush_log_at_trx_commit設置爲ON,因此修改session.innodb_flush_log_at_trx_commit也沒有作用,統一使用 global.innodb_flush_log_at_trx_commit = 1。


閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • [InnoDB] Failed to set NUMA memory policy of buffer pool page frames

  • 讓Mysql查詢後直接返回json字符串的方法

  • postgresql的pg_dump備份簡單方法

  • 使用sql語句在MySQL庫中去掉字段左邊、右邊指定字符串

我要說說
網上賓友點評