溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql數(shù)據(jù)庫磁盤io高的排查是怎樣的

發(fā)布時間:2021-10-08 16:25:56 來源:億速云 閱讀:770 作者:柒染 欄目:MySQL數(shù)據(jù)庫

mysql數(shù)據(jù)庫磁盤io高的排查是怎樣的,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

     最近,數(shù)據(jù)庫會報磁盤IO高的告警,但是cpu不高。

故障 
● 主機名稱: xxxx
● 告警信息: Disk I/O is overloaded on xxxx 
● 告警時間: 2020.04.10-13:09:06 
● 主機地址: xxxxxx
● 當前狀態(tài): 36.14 %

   數(shù)據(jù)庫磁盤io高時,執(zhí)行的sql如下:

2527 | xxxx | 172.xxxx:35072 | xxxx | Query | 0 | update | insert ignore into `xxxxannotations` (`trace_ |

2528 |xxxn | 172.xxxx:37270 | xxxx | Query | 0 | update | insert ignore into `xxxxannotations` (`trace_id`, `s

2530 | xxxx | 172.xxxx:44210 | xxxx | Query | 0 | update | insert into `xxxx_spans` (`trace_id`, `id`, `debug`, `start_ts`, `name

2531 |xxxx | 172.xxxx:45910 | xxxx | Query | 0 | query end | insert ignore into `xxxx_annotations`4'', -14081082788031) |

2532 | xxx | 172.xxxx:58890 | xxxx | Sleep | 0 | | NULL

    也就是數(shù)據(jù)庫會批量的執(zhí)行insert ignore into 語句。

mysql> show engine innodb status \G

 

---TRANSACTION 1557551308, not started flushing log

 

---TRANSACTION 1557551309, not started flushing log

 

---TRANSACTION 1557551310, not started flushing log

 

---TRANSACTION 1557551311, not started flushing log

 

---TRANSACTION 1557551313, not started flushing log

 

---TRANSACTION 1557551304, not started flushing log

............


    可以看到,每個事務都在flushing log中,說明刷redo log比較慢??赡苁莚edo log 比較小。

mysql> show variables like '%innodb_log_file_size%';

+----------------------+----------+

| Variable_name | Value |

+----------------------+----------+

| innodb_log_file_size | 50331648 |

+----------------------+----------+

1 row in set (0.00 sec)

   事實證明,innodb_log_file_size確實比較小,才50M,建議增大至2個4G。

   繼續(xù)分析:

mysql> show engine innodb status \G

--------

FILE I/O

--------

..........

Pending flushes (fsync) log: 1; buffer pool: 0

1 pending preads, 0 pending pwrites

................

 

 

LOG

---

Log sequence number 988322448590

Log flushed up to 988322444468

Pages flushed up to 988311239867

Last checkpoint at 988309561881

1 pending log writes, 0 pending chkp writes

23371463 log i/o's done,  132.33 log i/o's/second

    上述看到log thread 掛起的fsync()操作數(shù)據(jù)為1,說明log thread刷盤有等待。

    另外,last checkpoint落后于log flushed up to太多,接近于redo log文件的大小,這時會觸發(fā)innodb瘋狂刷redo,從而導致磁盤io高,對性能影響非常糟糕。

    還有,這個數(shù)據(jù)庫的innodb buffer pool也很小,使用的默認值為128M,也需要調大。

   優(yōu)化方法:

        設置innodb_log_file_size=4G,設置innodb_buffer_pool_size=4G。

        經(jīng)過觀察,數(shù)據(jù)庫磁盤io高、cpu不高的問題消失。

看完上述內容,你們掌握mysql數(shù)據(jù)庫磁盤io高的排查是怎樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI