MySQL 官方文檔說 innodb_log_buffer_size 是 redo log 的寫緩存,設置大一點能減小寫操做。數據庫
咱們用實驗來學習一下這個參數的做用。緩存
寬油起個數據庫:性能
先將 innodb_log_buffer_size 設置爲最小值。學習
接下來,咱們先建一個有數據的表,建表的方法參考實驗 11:spa
重複執行最後一句 insert,直到表中有 65536 行數據:orm
接下來咱們複製一張表,由於咱們要作兩次實驗:事務
接下來咱們開啓 innodb metrics 和 performance_schema:文檔
執行一次 insert,計算一下 LSN 的差值,也就是這個事務產生了多少 redo log:虛擬機
能夠看到這個事務大概產生了 3M 左右的 redo log。it
再看一下這個過程發生了多少 IO:
能夠看到發生了 7 次 IO,6 次 write 和 1 次 sync,每次 write 大概須要 0.8ms。
如今咱們變動一下 my.cnf,將 innodb_log_buffer_size 變動爲默認值 16777216,重啓數據庫。此處省略步驟, 只看結果:
因爲重啓了一次數據庫,記得再開啓一次 innodb metrics 和 performance_schema:
再執行一次 insert,計算一下 LSN 的差值, 不過此次用的是 t2 表:
也產生了 3M 左右的 redo log。
再來看看 IO:
此次只發生了 2 次 IO,一次 write 和一次 sync。
對比一下兩次 IO 的結果,能夠看到:
在個人虛擬機環境的通常存儲上,雖然 IO write 次數少了,但 write 的數據量是差很少的,因此總體的 IO 延遲整體差很少;在好點的存儲上,若是數據量差很少, write 次數越少,延遲會越低。
這也就是爲何你們在調整這個參數後, 常常會感知不到性能的提高。
關於 MySQL 的技術內容,大家還有什麼想知道的嗎?趕忙留言告訴小編吧!