監控大型數據庫上的慢查詢(Percona 5.6)
我正在尋找一種解決方案來監控非常大的生產數據庫(許多副本,超過 200 個表,一些表有 10-50 GB 的數據)和大量流量(大量查詢複雜性)。
主要目標是在應用程式碼更改後密切關注繁重的查詢。我們已經體驗到新程式碼引入了非最優 sql 查詢。
數據庫轉儲非常龐大,因此我們僅在暫存環境中使用範例。在這種情況下,幾乎不可能檢測到暫存的性能問題。
我考慮過使用 New Relic 之類的東西,但是對於如此龐大的基礎設施成本太高了,我不確定它是否會對性能產生負面影響。另一方面,我可以使用 MySQL 慢日誌。我在一些具有日誌速率限制的副本上啟用了它。一個月後,我沒有看到 I/O 速度影響,但我不確定是否為所有副本和主數據庫啟用它。我還發現了這篇文章http://blog.symedia.pl/2016/10/performance-impact-general-slow-query-log.html,它說了一些我過去讀過的不同的東西。
您將如何監控大型數據庫?
您可以使用pt-query-digest –processlist
雖然有四種不同的使用方式,恕我直言,使用它的最佳方式是每小時輪詢程序列表並收集指標。這種方法不需要慢查詢日誌。
我之前建議過這個(參見mysql 5.7 general_log table has user_host但文件沒有)
在我工作的最後一個大地方,我在 100 多台生產伺服器上保持慢日誌執行——主伺服器和副本,有些大,有些小。基本上沒有缺點。
long_query_time = 1
可能是一個很好的折衷方案——它可以擷取長時間執行的查詢,以及一些經常執行但執行緩慢的查詢。同時,它不會淹沒日誌文件。
pt-query-digest
是查找“最差”查詢的好方法。我會專注於那些。更多資訊: http: //mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog 它包括建議的設置。