mysql開啟慢查詢日誌 MySQL慢日誌體系建設

2021-10-11 16:07:32 字數 2494 閱讀 7964

慢查詢日誌是mysql提供的一種日誌記錄,用來記錄在mysql中響應時間超過閾值的sql語句,在很大程度上會影響資料庫整體的效能,是mysql優化的乙個重要方向。在58的雲db平台建設中,慢sql系統作為乙個非常重要功能模組,不僅是dba日常運維使用,我們也希望通過該功能可以協助開發人員更快速定位業務問題。

目前我們的慢日誌系統主要包括兩個核心功能:慢日誌報表和實時慢sql。

mysql的慢日誌分析工具主流有官方自帶的mysqldumpslow和第三方的pt-query-digest,由於後者有更多的額外屬性和附加能力,我們的慢日誌分析工具選擇使用pt-query-digest。

pt-query-digest有兩個比較好用的功能:query review和query history。在使用review功能時,會將慢日誌中的查詢語句去引數化後進行分組統計,並可將結果直接儲存到資料庫中。使用history時,則會將慢sql的查詢度量(如查詢時間、鎖時間等)儲存到資料庫中,這些資料將來可用於趨勢分析和查詢效能分析。

我們定義的慢查詢閾值(long_query_time) 標準為0.1s,不過不同的集群可以個性化定製。為了獲取資料庫每天的慢日誌報表,後台程式會根據雲db平台的cmdb資訊,對所有的資料庫集群每天凌晨進行切割,生成乙個上一整天的慢查詢日誌檔案,大體格式如下:

整個58集團有幾千套資料庫集群,為了整體統計所有資料庫集群的慢sql報表,我們內部開發了一套完善的慢sql分析流程,主要包含sql流水計算、全域性分析、診斷優化、建議推送、跟蹤反饋等各個功能模組。

通過收集模組收集所有集群的慢sql檔案,計算模組消費分析每天產生的慢日誌檔案,並將計算結果儲存到mysql中。篩選後的資料,由雲db平台展示,並根據慢sql的數量排行,將topn的郵件推送給開發人員。之後開發人員可使用雲db平台,獲取慢sql調優建議,並可借助工單系統,自助修改表索引,達到優化的目的。

我們的處理流程的大體如下:

慢sql分析計算流程:

• 根據資料庫集群cmdb資訊,獲取需要分析慢日誌的資料庫列表並進行切割;

• 通過ansible將相應的慢日誌檔案拉取到慢日誌分析伺服器;

• 通過pt-query-digest分析慢日誌並將結果寫入慢sql詳情庫;

• 在資料庫管理平台展示相應資料;

• 呼叫sqladvisor,獲取優化建議;

核心模組為呼叫pt-query-digest的分析,此處採用資訊入庫的方式,結果會儲存到兩個結果表tb_slowlog_review和tb_slowlog_review_history中,分析的具體命令如下:

經過流水計算後,慢sql分析的結果資訊儲存在mysql中,之後由資料庫雲平台開發相應的功能對外展示。目前我們主要抽象了如下幾個功能:

慢sql數量統計及優化建議

對每個集群的慢sql總數量進行趨勢圖展示,幷包括該集群下所有慢sql的執行次數、執行平均時間等維度的排序,以及對應的慢sql優化建議,如下圖:

單條慢sql詳情追蹤

針對產生的每一條慢sql給出數量趨勢統計,並會統計該慢sql的第一次出現時間、最新一次出現時間、**ip、所屬業務集群、負責人、執行次數等詳細資訊,最大程度的協助使用者快速定位該慢sql的**。具體見下圖:

除了上面兩個主要的模組外,我們還支援每日慢sql報表郵件推送,新增慢sql匯**計,通過多種方式協助高效進行慢sql的優化,提高資料庫的訪問效能。

慢sql報表系統,用於分析前一日產生的慢查詢日誌檔案,但乙個非常大缺陷是不能分析當日實時產生的慢sql,特別對於實時的線上調優效果,非常不方便。所以為解決該問題,我們實現支援了實時慢sql功能,開發人員可在平台中實時檢視生產環境產生的每一條慢sql語句。我們這裡引入了elk和kafka相關技術,實時慢sql系統結構如下:

實時慢sql的收集工作流程如下:

這樣在使用者端,開發人員即可所負責的mysql集群中檢視實時產生的慢sql了:

mysql慢查詢,作為影響效能關鍵因素,應被dba、開發人員重視,並及時處理。雲db平台從總體報表、實時流水、定量分析等多個維度,打造mysql慢查詢體系建設,為dba以及開發人員提供有力支援。

開啟mysql慢查詢日誌

檢視配置 檢視慢查詢時間 show variables like long query time 預設10s 檢視慢查詢配置情況 show status like slow queries 檢視慢查詢日誌路徑 show variables like slow 修改配置檔案 在 etc my.ini中...

開啟mysql慢查詢日誌

檢視配置 檢視慢查詢時間 show variables like long query time 預設10s 檢視慢查詢配置情況 show status like slow queries 檢視慢查詢日誌路徑 show variables like slow 修改配置檔案 在my.ini中加上下面兩...

mysql開啟慢查詢日誌

近日發現公司的某個 經常出現無響應狀態,經過一系列排查後最終確認是mysql的某些查詢導致了鎖表。這其中mysql的慢查詢log記錄讓我們定位到了根本原因.那麼什麼是慢查詢呢?它又有什麼作用呢?廢話不多說,在接下來的內容裡會解答這兩個問題。慢查詢日誌是mysql伺服器將影響資料庫效能的相關sql語句...