全部產品
Search
文件中心

PolarDB:SQL洞察

更新時間:Jul 31, 2024

PolarDB MySQL版SQL洞察功能已升級為SQL洞察和審計。SQL洞察和審計由資料庫自治服務DAS提供,在全量請求和安全審計的基礎上,融合了搜尋、SQL洞察、安全審計以及流量回放和壓測等功能,協助您更好地擷取SQL語句的具體資訊、排查各種效能問題、識別高危風險來源、驗證執行個體規格。

背景資訊

開啟SQL洞察和審計功能可以記錄所有DQL、DML和DDL操作資訊,這些資訊是通過資料庫核心輸出,對系統CPU消耗極低。

前提條件

如果是RAM使用者,使用搜尋功能時,需要為RAM使用者授予AliyunPolardbReadOnlyWithSQLLogArchiveAccess許可權。如何為RAM使用者授權,請參見建立和管理RAM使用者

說明

您也可以通過自訂權限原則授予RAM使用者使用搜尋(包含匯出)功能的許可權,詳情請參見通過自訂權限原則授權RAM使用者使用SQL洞察和審計的搜尋(包含匯出)功能

支援的地區

開啟DAS企業版後,才可以使用企業版提供的SQL洞察和審計功能,不同的企業版支援的地區不同。各個企業版支援的地區請參見各個版本支援的資料庫和地區

功能介紹

費用

開啟DAS企業版後,才可以使用該企業版提供的SQL洞察和審計功能,不同的企業版的計費請參見計費概覽

說明
  • 如果資料庫執行個體在SQL洞察升級為SQL洞察和審計之前已開啟了SQL洞察功能,則費用由PolarDB MySQL版側收取。詳情請參見SQL洞察計費規則(可選)

  • 如果您使用的是DAS企業版V3,則費用全部由DAS側收取。

開通SQL洞察和審計

  1. 登入PolarDB控制台

  2. 在左側導覽列單擊叢集列表

  3. 在左上方,選擇叢集所在地區。

  4. 找到目的地組群,單擊叢集ID。

  5. 在左側導覽列中,選擇日誌與審計 > SQL洞察

  6. 單擊開啟SQL洞察

    如果您當前的阿里雲帳號未開通DAS企業版,請按照介面提示,開通DAS企業版。

  7. 在右側頁面中單擊對應功能頁簽即可查看相關資訊。

    • 區間查看:選擇需要查看SQL洞察結果的時間範圍,您可以查看選定時間範圍內所有SQL的執行耗時分布執行耗時執行次數。您還可以在全量請求統計地區內查看選定時間範圍內所有SQL的詳細資料,並可以將其匯出到本地。

      說明

      最多支援匯出1000條SQL日誌,如果您需要擷取時間範圍更大、數量更多的SQL日誌,可以通過搜尋(審計)功能。

    • 對比查看:選擇需要對比SQL洞察結果的時間點,您可以查看所有SQL執行耗時分布執行耗時執行次數的對比結果。您還可以在請求對比列表地區內查看詳細的對比結果。

    • 來源統計:選擇需要統計SQL來源的時間範圍,你可以查看選定時間範圍內所有SQL的來源資訊。

    • SQL Review:對選定區間與基準區間內的資料庫執行個體進行workload分析,並且對資料庫執行個體中啟動並執行SQL進行深度分析,展示資料庫執行個體的索引最佳化建議、SQL改寫建議、TOP SQL、新增SQL、失敗SQL、SQL特徵分析、執行變化SQL、效能惡化SQL和TOP流量表。詳情請參見SQL Review

    • 相關SQL識別:選擇需要查看的指標,單擊分析按鈕,經過1~5分鐘的時間,即可以定位到在選定時間範圍內和相關指標變化趨勢最相似的SQL及其詳細資料。

    • 流量回放和壓測:詳情請參見流量回放和壓測

    • 安全審計:詳情請參見安全審計(舊版)

參數說明

  • 執行耗時分布:展示了選定時間範圍內,所有SQL的執行耗時分布,將執行耗時分為了7個區間,每分鐘計算一次,分別是:

    • [0,1]ms 是指滿足0ms ≤ 執行耗時 ≤ 1ms SQL執行次數佔比

    • (1,2]ms 是指1ms < 執行耗時 ≤ 2ms SQL執行次數佔比

    • (2,3]ms 是指2ms < 執行耗時 ≤ 3ms SQL執行次數佔比

    • (3,10]ms 是指3ms < 執行耗時 ≤ 10ms SQL執行次數佔比

    • (10,100]ms 是指10ms < 執行耗時 ≤ 100ms SQL執行次數佔比

    • (0.1,1]s 是指0.1s < 執行耗時 ≤ 1s SQL執行次數佔比

    • >1s 是指1s < 執行耗時 SQL執行次數佔比

    說明

    如果一個執行個體的執行耗時分布越接近藍色,代表這個執行個體的SQL健康情況越好,越接近橙色和紅色,代表這個執行個體的SQL健康情況越差。

  • 執行耗時(SQL RT):通過執行耗時,可以方便地查看在選定的時間範圍內,SQL的執行耗時。

  • 全量請求統計:展示了選定時間範圍內每一類SQL的SQL文本、耗時比例、平均執行耗時、執行趨勢等資訊。

    說明

    耗時比例=(該類SQL執行耗時 × 執行次數)/(所有SQL執行耗時 × 總執行次數)× 100%。耗時比例越高的SQL,佔用MySQL資源越多。

  • SQL ID:單擊SQL ID,您可查看該類SQL效能趨勢、SQL樣本等。

  • SQL樣本:通過SQL樣本,查看該SQL是由哪個應用端發起。

    說明

    SQL樣本的編碼採用UTF-8字元集。

修改SQL日誌的儲存時間長度

警告

減少SQL洞察和審計資料存放區時間長度後,DAS會立刻將超過儲存時間長度的SQL審計日誌清空。建議您將SQL審計日誌匯出並儲存至本地後,再減少SQL洞察和審計資料存放區時間長度。

  1. 登入PolarDB控制台

  2. 在左側導覽列單擊叢集列表

  3. 在左上方,選擇叢集所在地區。

  4. 找到目的地組群,單擊叢集ID。

  5. 在左側導覽列中,選擇日誌與審計 > SQL洞察

  6. 單擊右上方服務設定

  7. 修改儲存時間長度並單擊確定

    如果您開通了DAS企業版V3,您可以修改不同子功能的資料存放區時間長度。

    說明

    SQL洞察和審計資料的儲存空間是由DAS側提供,不佔用資料庫執行個體的儲存空間。

關閉SQL洞察和審計

警告

SQL洞察和審計功能關閉後,SQL審計日誌會被清空。請將SQL審計日誌匯出並儲存至本地後,再關閉SQL洞察和審計功能。當重新開啟SQL洞察和審計功能時,SQL審計日誌將從本次開啟SQL洞察和審計的時間開始記錄。

  1. 登入PolarDB控制台

  2. 在左側導覽列單擊叢集列表

  3. 在左上方,選擇叢集所在地區。

  4. 找到目的地組群,單擊叢集ID。

  5. 在左側導覽列中,選擇日誌與審計 > SQL洞察

  6. 單擊服務設定,關閉SQL洞察和審計。

    如果您開通了DAS企業版V3,請去勾選SQL洞察和審計的所有功能。

    說明
    • 如果您在Log Service的CloudLens for PolarDB中開啟了PolarDB MySQL版的審計日誌採集功能,系統會自動開啟對應PolarDB MySQL版的SQL洞察功能,因此您還需要關閉該PolarDB MySQL版的審計日誌採集功能。詳情請參見開啟資料擷取功能

    • SQL洞察功能關閉後,SQL審計日誌會被清空,建議先匯出SQL記錄後,再關閉SQL洞察功能。如何匯出SQL記錄,請參見匯出SQL日誌記錄

  7. 單擊確定

查看審計日誌的大小和消費明細

  1. 登入阿里雲管理主控台

  2. 在頁面右上方,選擇費用

  3. 在左側費用與成本導覽列中,選擇賬單管理 > 賬單詳情

  4. 賬單詳情頁簽,單擊明細賬單頁簽,設定搜尋執行個體ID進行搜尋。

    image

  5. 查看計費項目列為sql_explorer的費用明細。

遷移到新版

說明

當前僅華東1(杭州)、華東2(上海)、華北2(北京)和華南1(深圳)地區的資料庫執行個體支援將舊版SQL洞察和審計遷移到新版。

  1. 登入PolarDB控制台

  2. 在左側導覽列單擊叢集列表

  3. 在左上方,選擇叢集所在地區。

  4. 找到目的地組群,單擊叢集ID。

  5. 在左側導覽列單擊日誌與審計>SQL洞察

  6. 在彈出的SQL洞察升級為“SQL洞察和審計”對話方塊中,單擊一鍵升級

遷移不同企業版的SQL洞察和審計資料

企業版V2相對於企業版V1,變更了底層儲存架構,通過冷熱混合儲存實現降本增效,使用成本低。而企業版V3,在冷熱混合儲存的基礎上,按使用的功能細分計費項目,計費更加靈活,使用成本更低。

當您的資料庫執行個體支援企業版V3時,您可以將DAS企業版V1或V2的資料移轉至企業版V3,以獲得更加優惠的費用,詳情請參見DAS企業版間資料如何遷移?

常見問題

Q:SQL洞察全量請求統計地區中的logout!語句是什嗎?

A:logout!是指串連斷開。logout!的耗時,是指上一次互動時間到logout!發生時間的差值,可以理解為串連閒置時間長度。狀態列的1158是指網路連結斷開,其可能的原因是:

  • 用戶端連線逾時。

  • 服務端異常斷開。

  • 服務端串連Reset(超過interactive_timeout或wait_timeout時間長度)。

Q:SQL洞察來源統計中,為什麼會出現%訪問來源

A:該情況可能在您使用預存程序時出現。按如下樣本可以複現這種情況:

說明

樣本中資料庫執行個體為RDS MySQL,測試帳號為test_user,測試資料庫為testdb。

  1. 在RDS控制台建立普通許可權帳號及其授權的資料庫,詳細操作請參見建立資料庫和帳號

  2. 使用測試帳號通過命令列方式串連資料庫執行個體,詳細操作請參見通過用戶端、命令列串連RDS MySQL執行個體

  3. 切換到測試資料庫,並建立如下預存程序。

    -- 切換到測試資料庫
    USE testdb;
    
    -- 建立預存程序
    DELIMITER $$
    DROP PROCEDURE IF EXISTS `das` $$
    CREATE DEFINER=`test_user`@`%` PROCEDURE `das`()
    BEGIN
    SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID();
    END $$
    DELIMITER;
  4. 使用高許可權帳號串連資料庫執行個體,詳細操作請參見通過用戶端、命令列串連RDS MySQL執行個體

  5. 調用預存程序。

    -- 切換到測試資料庫
    USE testdb;
    
    -- 調用預存程序
    CALL das();
    
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+
    | ID     | USER      | HOST   | DB     | COMMAND | TIME | STATE     | INFO                                                                    |
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+
    | 487818 | test_user | %:2065 | testdb | Query   |    0 | executing | SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID() |
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+

Q:為什麼日誌列表中展示的資料庫名稱和SQL語句中的不一致?

A:日誌列表中所展示的資料庫名稱是從會話中擷取的,而SQL語句中的資料庫名稱則由使用者指定,取決於使用者的輸入或查詢的設計,例如跨資料庫查詢、動態SQL等情境。兩者之間可能存在不一致的情況。