全部產品
Search
文件中心

PolarDB:SQL洞察

更新時間:Dec 21, 2024

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

支援地區

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

功能介紹

  • 搜尋功能:查詢並匯出SQL語句及對應的各種資訊,如資料庫、狀態、執行時間等,詳情請參見搜尋(審計)

  • SQL洞察功能:對SQL進行健康情況診斷、效能問題排查、業務流量分析等,詳情請參見SQL洞察

    • SQL Review功能:提供全域SQL負載分析能力,輔助使用者快速定位到資料庫執行個體中的可疑SQL,並對可疑SQL進行分析,給出相應的最佳化建議,具體操作請參見SQL Review

    • 流量回放和壓測功能:提供流量回放和壓測功能,協助您驗證您的執行個體規格是否需要擴容,有效應對業務流量高峰,具體操作請參見流量回放和壓測

    • 安全審計功能:可自動識別高危SQL、SQL注入、新增訪問來源等風險,詳情請參見安全審計(舊版)

    • 事務分析功能:通過事務分析功能,您可以獲知指定時間段內某線程的事務類型、事務數量及事務詳情,便於從事務層面瞭解、分析和最佳化資料庫效能,具體操作請參見事務分析

    • 快速事務分析功能:通過快速事務分析功能,可以獲知待分析SQL所在事務的開始語句和結束語句,從而獲知事務的提交或復原情況,具體操作請參見快速事務分析

影響

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

注意事項

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

說明

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

費用

企業版V0

SQL洞察功能的付費方式僅支援隨用隨付,不支援訂用帳戶。其相關費用歸屬於雲原生資料庫PolarDB

價格

  • 中國內地地區:0.0013美元/GB/小時。

  • 中國香港及海外地區:0.0019美元/GB/小時。

企業版V0以上版本

SQL洞察功能相關費用歸屬於資料庫自治服務DAS。有關具體資訊,請參見資料庫自治服務DAS產品計費說明

開通SQL洞察和審計

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

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

  3. 單擊開啟SQL洞察

    說明

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

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

    • 搜尋(審計):查詢並匯出SQL語句及對應的各種資訊,如資料庫、狀態、執行時間等。

    • SQL洞察

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

        說明

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

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

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

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

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

      • 流量回放和壓測:面對即將到來的短期業務高峰或資料庫結構變更(尤其是索引變更)時,您可以通過流量回放與壓測功能,確認資料庫執行個體規格是否需要擴容,並驗證在真實業務情境下的實際效果,降低上線後引發故障的風險。

      • 安全審計:自動識別高危操作、SQL注入、新增訪問等風險。

      • 事務分析:基於DAS企業版 V3熱儲存資料,對所選定的線程和時間範圍內的事務詳情進行分析,然後進行統計分析,並繪製不同類型事務數量的趨勢圖。

參數說明

  • 執行耗時分布:展示了選定時間範圍內,所有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控制台,選擇叢集所在地區,在叢集列表中單擊目的地組群ID進入詳情頁。

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

  3. 單擊右上方服務設定

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

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

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

關閉SQL洞察和審計

警告

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

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

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

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

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

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

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

  4. 單擊確定

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

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

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

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

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

    image

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

遷移到新版

說明

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

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

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

  3. 在彈出的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等情境。兩者之間可能存在不一致的情況。