innodb髒頁刷新參數調優

Mysql innodb是如何刷新髒頁的,innodb的策略是儘量使用內存,假設我們給的innodb 內存是1g,當一個請求到達mysql 時,這時候innodb 就會把最久不使用的數據頁釋放掉,供給新的請求使用,如果這個被釋放的頁原本就是乾淨的,直接使用。如果這是一個髒頁,就必須把髒頁刷新到磁盤,然後才能使用。

相關參數:

Innodb_io_capacity  磁盤的io能力, 可以通過fio測試磁盤的iops,這個值就是磁盤的io能力,建議innodb_io_capacity 參數=iops

 

 

但是mysql並不是全力按照上面的參數進行刷新髒頁,刷新速度受到兩個因素影響,一個是髒頁比例,一個是redo log 寫盤速度。

參數innodb_max_dirty_pages_pct 髒頁比例上線 默認75% 我認爲一般不用改。

 

下面語句可以得到當前的髒頁的比例。

 

select VARIABLE_VALUE into @a fromglobal_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_dirty';

select VARIABLE_VALUE into @b fromglobal_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_total';

select @a/@b;

 

在刷新髒頁過程中,如果磁盤髒頁鄰近也是髒頁,會把這個鄰居也flush掉,這個行爲由innodb_flush_neighbors 來控制,這個參數對機性硬盤來說很有效,可以減少隨機io,增加性能。如果是ssd類磁盤,建議設置爲0,可以更快的刷新髒頁。Mysql8.0中,這個參數已經默認爲0了。

如何看到到底由多少髒頁沒有刷新呢。

Show engine innodb status\G

 

 

找到log 部分

 

Checkpoint lsn 就是 和lsn 之間的差就是髒頁,只有之間相差不是太大,認爲就是沒有問題,如果很大的話,說明很多髒頁沒有刷新到磁盤,此時肯定會影響mysql性能,需要注意。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章