調查 MySQL 吞吐量的峰值
最近我們的一台伺服器記憶體不足並崩潰了。查看
munin
圖表後,似乎在崩潰前達到峰值的唯一指標(記憶體使用率除外)是MySQL throughput
. 然而,我們預計會看到相應的增加數量MySQL queries
並沒有發生:
我們想找出導致 MySQL 吞吐量達到峰值的原因。以下是崩潰中的 bin 日誌列表:
101M Apr 17 01:27 drupal_master-bin.001270 106M Apr 17 03:00 drupal_master-bin.001271 101M Apr 17 04:05 drupal_master-bin.001272 104M Apr 17 05:53 drupal_master-bin.001273 104M Apr 17 06:39 drupal_master-bin.001274 101M Apr 17 07:02 drupal_master-bin.001275 104M Apr 17 07:22 drupal_master-bin.001276 # 100M filled up in 1 min 106M Apr 17 07:23 drupal_master-bin.001277 101M Apr 17 07:33 drupal_master-bin.001278 101M Apr 17 07:43 drupal_master-bin.001279 104M Apr 17 07:46 drupal_master-bin.001280 102M Apr 17 08:29 drupal_master-bin.001281 102M Apr 17 08:46 drupal_master-bin.001282 105M Apr 17 08:54 drupal_master-bin.001283 13M Apr 17 09:26 drupal_master-bin.001284 # crash of server around 09:50 # prior to crashing load went very high (we saw 45) and server was extremely slow (few min delay when typing in an SSH session) 101M Apr 17 10:54 drupal_master-bin.001285 # server up again, nothing wrong since then
我一直在尋找分析這些 bin 日誌的工具。到目前為止,我發現:
binlog-analyze.pl:給我處理的查詢的概述,在
select
,insert
,update
.. 上進行細分(僅供參考,我在腳本中替換select into
為select
,因為它似乎是錯誤的)。
$ mysqlbinlog /path/to/bin.log | binlog-analyze.pl -v
pt-query-digest:給我關於查詢大小的統計資訊(最小,最大,平均……)。該實用程序有很多選擇,但我不知道要尋找什麼。
$ mysqlbinlog /path/to/bin.log | pt-query-digest
我們想知道是哪些查詢導致 MySQL 輸出增加。
有人可以指導如何查看 MySQL bin 日誌以辨識導致 MySQL 吞吐量突然增加的查詢嗎?
分析二進制日誌可能無法為您提供準確的圖片,因為二進制日誌包含已完成並插入二進制日誌(如 FIFO 隊列)的查詢。
您真正需要尋找的是主動執行查詢的直方圖是什麼樣的。換句話說,您需要擷取程序列表,以揭示特定情況出現時哪些查詢和性能如何。
我強烈推薦使用 pt-query-digest 但你需要以不同的方式使用它。讓查詢摘要處理二進制日誌條目,讓它處理程序列表 LIVE !!!
我寫了一篇過去的文章(2011 年 11 月 24 日)關於如何使用pt-query-digest(我的文章使用mk-query-digest)作為慢查詢日誌的替代品(我已經發布了我使用的實際腳本以及如何讀取查詢摘要輸出):MySQL 一般查詢日誌的性能影響。我過去的文章基於一個 YouTube 影片,展示瞭如何做到這一點。我只是簡單地使用mk-query-digest模擬自己。