24、線上SQL抖動優化

1、刷緩存頁導致

分析可能導致抖動的原因:
1) buffer pool滿了, 等待線程將髒頁刷新到磁盤
2) redo log寫滿了, 這些redo log日誌對應的更新操作改動了緩存頁, 這些緩存頁還沒有flush到磁盤
優化: 儘可能減少flush緩存頁到磁盤的開銷最小
1) 使用SSD固態硬盤
2) 配置innodb_io_capacity, 將它的值配置爲SSD固態硬盤能夠承載的最大隨機IO速率, 可以使用fio工具測試, 儘可能的
   讓數據庫用最大速率去flush緩存頁到磁盤
3) innodb_flush_neighbours, 在flush緩存頁到磁盤時, 可能會把緩存頁臨近的其他緩存頁也刷到磁盤, 可以將該參數
   配置爲0, 禁止刷臨近緩存頁

2、RAID鋰電池放電導致

RAID磁盤陣列: 用來管理多塊磁盤的技術, 可以提供數據冗餘等. 爲了提升Mysql寫數據到RAID磁盤的速率, 它是先寫到
SDRAM緩存裏面的, 這個策略稱爲write back. 如果是直接寫磁盤則是write through. 

爲什麼要有鋰電池?
如果服務器突然斷電, 那麼SDRAM緩存裏面的數據不是丟了? 所以RAID是基於鋰電池來供電運行的, 然後它會趕緊將緩存
裏面數據寫入到陣列上的磁盤裏面去. 爲了保護鋰電池性能, 需要定時對其充放電, 在鋰電池充放電的過程中, RAID的緩存
級別會從write back改爲write through, 直接寫磁盤, 性能就會變差. 所以一旦RAID鋰電池自動充放電, 就可能導致數據庫
性能出現抖動.
解決方案:
1) 手動充放電: 關閉RAID自動放電, 用腳本在業務低峯期自動觸發充放電
2) 充放電時也不要關閉write back, 兩個策略可以配合一起使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章