全部產品
Search
文件中心

ApsaraDB RDS:SQL洞察和審計

更新時間:Jul 04, 2025

在安全合規審計、效能分析及故障排查等情境中,建議您開啟SQL洞察和審計功能。開啟後,系統將自動記錄資料庫核心中執行的SQL變動及其相關資訊(如執行帳號、IP地址、執行詳情等),開啟及使用該功能對執行個體效能幾乎無影響,為您後續查詢歷史SQL變更記錄及開展分析與審計提供可靠的資料支援。

前提條件

重要

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

功能概覽

SQL洞察和審計提供審計、SQL洞察、安全審計、流量回放和壓測、SQL分析等功能:

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

  • SQL洞察:對指定時間SQL進行健康情況診斷、效能問題排查、業務流量分析等。

  • 安全審計(舊版):可自動識別高危SQL、SQL注入、新增訪問來源等風險。

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

  • SQL分析:對指定時間段的SQL進行分析,找出異常SQL,定位效能問題。

SQL洞察和審計常用於以下情境:

  • 對資料安全要求嚴格的行業,如金融、安全、證券、政務、保險等。

  • 需要詳細排查資料庫運行情況的情境,如問題排查、SQL語句效能排查、異常會話排查。

  • 在極端情況下,若發生資料丟失或損壞,可以通過SQL洞察記錄的SQL語句進行問題分析和排查,以便資料恢複。

支援地區

華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北3(張家口)、華北5(呼和浩特)、華北6(烏蘭察布)、華南1(深圳)、華南2(河源)、華南3(廣州)、西南1(成都)、中國(香港)、新加坡、日本(東京)、馬來西亞(吉隆坡)、印尼(雅加達)、美國(矽谷)、英國(倫敦)、美國(維吉尼亞)和德國(法蘭克福)

計費詳情

  • 在SQL洞察升級為SQL洞察和審計之前,您已購買執行個體並開通SQL洞察功能:功能費用由RDS側收取,按小時計費,不同地區執行個體價格不同。

    • 0.0015美元/(GB*小時):中國(香港)、美國(矽谷)、美國(維吉尼亞)。

    • 0.0018美元/(GB*小時):新加坡、日本(東京)、德國(法蘭克福)、阿聯酋(杜拜)、馬來西亞(吉隆坡)、印尼(雅加達)、英國(倫敦)。

    • 0.0012美元/(GB*小時):華東 1(杭州)、華東 2(上海)、華北 1(青島)、華北 2(北京)、華北 3(張家口)、華北 5 (呼和浩特)、華北6(烏蘭察布 )、華南 1(深圳)、華南2(河源)、華南3(廣州)和西南1(成都)。

    說明

    您可以在SQL洞察頁簽彈出的升級對話方塊中單擊一鍵升級,升級為SQL洞察和審計。升級後費用由DAS側收取。

  • 在SQL洞察升級為SQL洞察和審計之後,新開通SQL洞察和審計功能:費用由DAS側收取。開啟DAS企業版後,才可以使用該企業版提供的SQL洞察和審計功能。不同企業版支援的地區和計費方式不同,詳情請參見各企業版支援的資料庫和地區各企業版產品計費

    說明

    通過控制台,您只能開通當前地區支援的最高版本的DAS企業版。

注意事項

  • 線上查詢

    • 時間範圍:單次線上查詢時間範圍最多為24小時,您可以查詢資料存放區時間長度範圍內任意24小時的資料(時間範圍過長會導致查詢逾時)。如果需要查詢更大時間範圍的SQL記錄,請使用Log Service接入洞察日誌。詳情請參見採集RDS SQL審計日誌

    • 查詢方式:線上查詢支援組合查詢,不支援模糊查詢,查詢關鍵字至少包含4個字元。

  • SQL洞察和審計

    • SQL語句最大長度:SQL洞察和審計記錄的SQL語句最大長度為8192位元組且受loose_rds_audit_max_sql_size(MySQL 5.6/5.7)或loose_rds_audit_log_event_buffer_size(MySQL 8.0)參數影響,取三者最小值。由於資訊採集處理時會增加首碼標註,實際記錄的SQL語句最大長度略小於8192位元組或參數設定。

    • 審計記錄查詢:審計記錄支援通過線程ID和事務ID查詢SQL語句記錄。通過事務ID查詢時需將loose_rds_audit_log_version參數值設為MYSQL_V3,且對資料庫小版本有最低要求:MySQL 8.0小版本需為20210930以上,MySQL 5.7小版本需為20210630以上,詳情請參見RDS MySQL 8.0開放參數一覽表升級核心小版本

    • 試用版SQL洞察:如您的SQL洞察為試用版,暫不支援調用API(DescribeSQLLogRecordsDescribeSQLLogFiles)查詢審計日誌。

    • 鎖等待時間:洞察日誌包含鎖等待時間,而慢日誌不包含。

    • 當程式使用Prepare方式時,會在SQL洞察中出現2條語句,一條包含問號,一條包含具體值。

  • 如果使用RDS資料庫代理地址串連,且代理開啟了事務級串連池,由於串連可能會被複用,所以使用show processlist命令或者SQL洞察顯示的IP地址和連接埠可能和用戶端實際的IP地址和連接埠不一致。

  • 掛載到PolarDB-X 1.0(DRDS)的RDS MySQL執行個體執行一條SQL語句時,由於水平分割(分庫分表)原因,會在RDS MySQL執行個體上產生多條SQL洞察和審計日誌。

開啟SQL洞察和審計

說明
  • 如果您在Log Service的CloudLens for RDS開啟了RDS MySQL執行個體的審計日誌採集功能,系統會自動開啟對應RDS MySQL執行個體的SQL洞察和審計功能。

  • 如果您未開通SQL洞察和審計功能,您可以通過Binlog日誌進行查看。Binlog日誌只能查詢備份保留時間以內的增、刪、改等SQL語句,不能查看來源IP和帳號資訊。

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列中,選擇自治服務(原CloudDBA) > SQL洞察和审计

  3. 單擊開啟企業版V3。image

  4. 勾選需要開啟的功能,單擊開通

修改SQL洞察和審計資料存放區時間長度

警告

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

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列中,選擇自治服務(原CloudDBA) > SQL洞察和审计

  3. 單擊服務設定

  4. 服務設定頁,修改審計情境的日誌儲存時間長度,然後單擊提交

關閉SQL洞察和審計

警告

關閉SQL洞察和審計功能後,日誌會被清空。建議先匯出並儲存日誌。當重新開啟SQL洞察和審計功能時,日誌將從新開啟時間開始記錄。

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列中,選擇自治服務(原CloudDBA) > SQL洞察和审计

  3. 審計頁簽下的日誌列表地區,單擊匯出

    image

  4. 在彈出的對話方塊中,選擇匯出欄位和匯出時間範圍,單擊確定

    說明
    • 單次最多可匯出7天內的1000萬條資料。

    • 可以通過設定匯出時間範圍來匯出更大時間範圍的SQL記錄。

  5. 匯出完成後,下載已匯出的檔案並妥善儲存。

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

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

    說明

    關閉SQL洞察和審計功能約1小時後,系統會釋放SQL洞察和審計資料佔用的儲存空間。

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

警告

遷移操作無法終止和回退,請仔細閱讀遷移說明。

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

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

常見問題

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:為什麼RDS MySQL資料庫執行個體審計功能的日誌列表中,有些SQL語句實際有資料返回,但掃描行數顯示為0?

A:資料庫執行個體開啟了query_cache_type。日誌列表中,SQL語句的掃描行數統計的是在InnoDB引擎層掃描的行數,開啟query_cache_type後,MySQL會嘗試將查詢結果緩衝起來,如果後續有相同的查詢請求到來,且查詢快取命中,則不會再到InnoDB層進行查詢,直接返回緩衝結果。因此,實際有資料返回,但日誌列表中統計的掃描行數為0。詳情請參見Fast Query Cache

Q:SQL洞察與Binlog日誌的區別?

RDS MySQL的增量資料可以通過SQL洞察或Binlog日誌來查看,兩者區別如下:

  • SQL洞察:適用於擷取資料庫中所有增量資料,但是在執行個體負載非常高時,會丟失少量記錄,因此通過這種方式來統計增量資料可能會出現不準確的情況。可以記錄所有DQL、DML和DDL操作資訊,這些資訊是通過資料庫核心輸出,對系統CPU消耗極低。

  • Binlog日誌:適用於短期內擷取準確的增量資料,但是無法擷取即時日誌資訊。準確記錄資料庫所有的增、刪、改操作資訊以及恢複使用者的增量資料。Binlog日誌暫存在執行個體中,系統定期將執行個體中已經寫完資料的Binlog日誌轉移至OSS儲存7天。無法儲存正在寫入資料的Binlog檔案,因此單擊一鍵上傳Binlog後仍有部分Binlog日誌沒有被上傳。詳情請參見雲資料庫RDS MySQL版遠程擷取Binlog日誌並解析Binlog日誌

Q:為什麼執行個體控制台中SQL洞察入口消失了?

A:由於SQL洞察和審計功能版本更新,最新版的入口已經變成了SQL洞察和審計

Q:還能開通舊版本的SQL洞察嗎?

A:當前只能開通本執行個體支援的最新版本的SQL洞察和審計

Q:匯出SQL記錄後,原記錄還存在嗎?

A:存在。匯出操作不會刪除原始審計記錄。