全部產品
Search
文件中心

PolarDB:慢SQL

更新時間:Sep 09, 2026

PolarDB MySQL版預設將執行時間超過1秒的SQL語句定義為慢SQL,並在控制台提供SQL分析功能。您可以查看慢日誌的趨勢和統計資訊。此外,系統還提供相關SQL的最佳化建議和診斷分析,便於您進行深入分析與最佳化。

前置檢查(可選)

為確保您能正常查看慢SQL日誌,請核實您的賬戶是否已授權AliyunHDMFullAccess許可權。若需進行更精細的許可權管理,您可以使用自訂策略來授權RAM使用者,以便對PolarDB進行靈活的管控設定。

注意事項

慢日誌的最大長度為16 KB,超過該長度的部分將被截斷。

查看慢SQL

  1. 登入PolarDB控制台,在左側導覽列單擊集群列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。

  2. 在左側導覽列中,選擇诊断与优化 > 慢 SQL

  3. 慢 SQL頁面中分為以下三種功能:

    慢日誌分析

    慢日誌分析頁簽,選擇需要查看的時間段,查看該時間段內慢日誌趨勢事件分布慢日誌統計慢日誌明細

    • 您可以在慢日誌趨勢圖中選擇某個時間點,查看該時間點的慢日誌統計慢日誌明細

      說明

      如果慢日誌語句內容過長,沒有完整展示,您可以將滑鼠指標放置在對應的慢日誌語句上,系統將以彈框的形式展示完整的慢日誌語句。

    • 事件分布地區:可以查詢到指定時間範圍內的慢日誌事件,單擊後可查詢事件詳情。

    • 您可以在節點ID下拉框地區,查看每個節點的慢請求數量。

    • 慢日誌統計慢日誌明細頁簽中單擊image,可以將慢日誌資訊儲存到本地查看。

    • 單擊image,可攜帶當前已選擇和輸入的參數,跳轉至OpenApi控制台,進行API調試。

    • 慢日誌統計地區:

      • 在列表上側,可選擇過濾條件,對資料進行篩選,不同的資料庫引擎可篩選條件不同。

      • 單擊目標SQL模板Query ID列的資料ID,可查看包含使用者分布、用戶端分布和指標趨勢的相關性及明細列表。

      • 單擊目標SQL模板操作列的最佳化,在彈出的SQL診斷最佳化對話方塊中,查看SQL診斷結果。

        若您採納診斷建議,單擊頁面右上方的複製,並將最佳化後的SQL粘貼到資料庫用戶端或DMS上執行,若不採納診斷建議,可直接單擊取消結束診斷。

        說明

        DAS會根據SQL的複雜程度、對應表的資料量、資料庫負載等進行SQL診斷,診斷建議的返回時間可能會超過20秒。完成診斷後,SQL診斷引擎會給出診斷結果、最佳化建議和預期最佳化收益,您可以根據診斷結果確認是否採納建議。

      • 單擊目標SQL模板操作列的限流,在SQL限流頁面配置限流參數,對目標SQL進行限流。詳細操作請參見SQL限流

      • 對於PolarDB MySQL版資料庫執行個體,單擊目標SQL模板操作列的IMCI,查看列存索引(IMCI)的相關文檔。

        說明
        • PolarDB MySQL版資料庫執行個體未購買列存索引節點,且慢日誌的最大執行時間超過20秒,最大掃描行超過20萬行時,顯示IMCI按鈕。

        • 對於巨量資料量複雜查詢,推薦使用列存索引(IMCI)提升查詢效能。

    • 慢日誌明細地區,單擊目標SQL操作列的最佳化限流,也可對目標SQL進行SQL診斷最佳化SQL限流

    自動SQL最佳化建議

    自動SQL最佳化建議頁面,選擇需要查看的時間段。

    開啟自動SQL最佳化:自動識別問題SQL,產生索引最佳化建議,並在不引發鎖表的情況下自動建立索引。

    說明

    您可以根據業務查看詳情請參見自動SQL最佳化

    查詢治理

    查詢治理頁,查看查詢治理結果。

    • 查詢治理結果概覽:查看系統打標分類後的結果資料。

      說明

      只統計開啟DAS企業版執行個體的執行失敗SQL次數

    • 查詢治理趨勢:查看所選時間範圍內查詢治理結果的變化趨勢。

    • TOP數據:查看執行個體紅榜執行個體黑榜

      • 執行個體黑榜:查看資料庫執行個體慢SQL執行次數。

      • 執行個體紅榜:查看資料庫執行個體慢SQL執行次數變化量,負數表示慢SQL執行次數減少量(最佳化效果好),正數表示慢SQL執行次數增加量。

      DAS推薦您重點關注推薦最佳化SQL的紅黑榜。

    • 待最佳化SQL:您可以設定篩選條件,過濾出需要治理的SQL語句。

      說明

      支援通過DB名稱、SQL關鍵字、規則標籤和資料庫使用者名稱進行篩選,四者之間是邏輯與的關係。

      • 多個DB名稱之間使用英文逗號(,)分隔,邏輯關係為或。

      • 多個SQL關鍵字之間使用空格分隔,邏輯關係為與。

      • 多個資料庫使用者名稱之間使用英文逗號(,)分隔,邏輯關係為或。

      • 規則標籤支援多選,多個規則之間邏輯關係為或。

      • 單擊目標SQL樣本操作列的建議,查看詳細的治理建議。

      • 單擊目標SQL樣本操作列的打標,對此SQL進行手動打標。標籤的具體含義請參見支援手動打標的SQL標籤。

        您也可以勾選需要手動打標的SQL,進行批量打標。

      • 單擊目標SQL樣本操作列的樣本,查看此SQL的慢日誌樣本詳情。

      • 單擊目標SQL樣本操作列的趨勢,查看此SQL的慢日誌分析詳情。詳細的慢日誌分析介紹及操作請參見慢日誌

      您可以根據需要匯出和分享待最佳化的SQL資料,具體操作請參見慢日誌

    • 失敗SQL:您可以設定篩選條件,過濾出需要查看的SQL語句。

      說明
      • 只統計開啟DAS企業版執行個體的失敗SQL

      • 支援通過DB名稱和SQL關鍵字進行篩選,兩者是邏輯與的關係。

        • 多個DB名稱之間使用英文逗號(,)分隔,邏輯關係為或。

        • 多個SQL關鍵字之間使用空格分隔,邏輯關係為與。

      單擊目標SQL樣本操作列的樣本,查看此SQL的樣本詳情。

調整慢SQL閾值

您可以前往PolarDB控制台配置与管理 > 参数配置頁面中,通過設定long_query_time參數來調整慢SQL定義的閾值。

參數

說明

long_query_time

將所有執行時間超過參數值的查詢記錄到慢查詢日誌中。

取值範圍:0.03-31536000,預設值:1,單位秒。

常見問題

為什麼會出現慢日誌記錄的SQL執行完成時間與SQL語句的實際執行時間不同?

通常情況下是執行SQL語句修改了時區。慢日誌記錄的SQL執行時間的時區,存在會話層級、資料庫層級和系統層級。慢日誌時間設定邏輯為:當資料庫存在時區時,以資料庫的時區為準,否則以系統時區為準。當通過SQL語句修改了會話層級的時區時,可能導致慢日誌記錄的時區無法正常轉換。

如何發現慢SQL?

您可以通過如下兩種方式發現慢SQL:

  • 直接在控制台上查詢慢SQL,詳情請參見慢SQL

  • 串連資料庫叢集後執行show processlist,找出執行時間過長的SQL,關於如何串連資料庫叢集,請參見如何串連資料庫

掃描行數(rows_examined)是什嗎?掃描行數遠大於返回行數怎麼辦?

掃描行數(rows_examined)表示 SQL 陳述式執行過程中實際讀取的行數,由資料庫核心在執行查詢時自動統計,無需額外配置。

如果某條慢 SQL 的掃描行數遠大於返回行數,說明查詢讀取了大量無用資料,通常由以下原因導致:

  • 查詢條件缺少合適的索引,導致全表掃描或索引區分度不足。

  • 表的統計資訊到期,導致最佳化器選擇了非最優的執行計畫。

可以按以下步驟最佳化:

  1. 使用 EXPLAIN 查看該 SQL 的執行計畫,確認是否走了預期的索引。

  2. 執行 ANALYZE TABLE 重新收集表的統計資訊,協助最佳化器選擇更優的執行計畫。

  3. 若執行計畫仍不理想,根據查詢條件補充或調整索引。

本文中自動SQL最佳化建議功能可自動識別問題 SQL 並產生索引最佳化建議,可用於輔助判斷索引是否合理。

使用 SDK 調用慢日誌相關 API 時報 InvalidVersion 錯誤,如何處理?

通過 SDK(例如 Python 指令碼)調用 DescribeSlowLogRecords 等慢日誌相關 API 時,如果返回 InvalidVersion 錯誤,請先檢查請求參數中的 Version 取值是否正確。

建議先在阿里雲 OpenAPI 門戶的調試工具中驗證參數是否正確、鏈路是否連通,確認無誤後再調整代碼中的配置。

為什麼相同的 SQL 或按主鍵更新的 SQL,執行耗時偶爾會大幅波動(例如從毫秒級變為秒級)?

可以按以下順序排查:

  1. 檢查統計資訊:執行 ANALYZE TABLE 重新收集相關表的統計資訊,避免統計資訊到期導致最佳化器選擇錯誤的索引。

  2. 對比執行計畫:分別擷取耗時正常與耗時異常時的執行計畫,確認波動是否由索引選擇不同導致。

  3. 排查用戶端與運行環境:如果資料庫側無異常且慢日誌中沒有對應記錄(即執行時間未超過本文調整慢SQL閾值中的 long_query_time),說明耗時可能並非消耗在資料庫執行階段,需檢查用戶端伺服器是否存在網路延遲、資源爭用或串連池耗盡(例如 HikariCP 擷取連線逾時)等問題。

  4. 臨時緩解:對於串連池耗盡的情境,可臨時增大串連池的 maximumPoolSize 參數以緩解等待;但根本解決仍需優先最佳化耗時佔比較高的慢 SQL,降低串連佔用時間。

最佳實務

PolarDB MySQL版CPU使用率高

相關API

API

說明

查詢PolarDB叢集的慢日誌統計資訊

查看PolarDB MySQL版叢集的慢日誌統計資訊。

查看慢日誌明細

查看PolarDB MySQL版叢集的慢日誌明細。

查詢叢集SQL採集功能

查看PolarDB MySQL版叢集的SQL採集功能(例如審計日誌、SQL洞察等)是否開啟。

開啟或關閉叢集的SQL採集功能

開啟或關閉PolarDB MySQL版叢集的SQL採集功能(例如審計日誌、SQL洞察等)。