全部產品
Search
文件中心

ApsaraDB RDS:SQL洞察和審計

更新時間:Nov 13, 2024

當您在安全合規審計、效能分析、故障排除等情境下需要監控和管理RDS MySQL執行個體中執行的SQL語句時,可以利用SQL洞察和審計功能對SQL語句的執行情況進行記錄和彙總分析。開啟該功能後會自動記錄來自資料庫核心的SQL語句,以及SQL語句的執行帳號、IP地址、執行詳情等資訊,對執行個體效能沒有影響。

前提條件

重要

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

計費詳情與功能概覽

執行個體地區

支援的功能

計費

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

SQL洞察和審計

  • 搜尋

  • SQL洞察

  • 安全審計

  • 流量回放和壓測

  • 如果全新開啟SQL洞察和審計功能,費用由DAS側收取。開啟DAS企業版後,才可以使用該企業版提供的SQL洞察和審計功能。

    重要

    通過控制台,您只能開通當前地區支援的最高的DAS企業版。隨著DAS企業版版本的更新,其計費方式變得更加靈活。

  • 如果資料庫執行個體在SQL洞察升級為SQL洞察和審計之前已開啟了SQL洞察功能,則費用由RDS側收取。

    說明

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

說明

由RDS側計費時,按小時計費,不同地區的執行個體有不同的計費。

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

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

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

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

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

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

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

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

使用情境

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

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

  • 極端情況保護資料的情境,可以通過SQL洞察記錄的SQL語句恢複資料。

注意事項

  • 單次線上查詢時間範圍最多為24小時。這是因為SQL洞察記錄所有資料庫行為,會記錄大量SQL語句,線上查詢選擇時間範圍過大,會導致長時間沒有返回查詢結果,甚至查詢逾時。

    說明
    • 您可以查詢資料存放區時間長度範圍內,任意24小時的資料。

    • 如果需要查詢更大時間範圍的SQL記錄,可以使用Log Service接入洞察日誌。詳情請參見採集RDS SQL審計日誌

  • 線上查詢支援組合查詢。例如在關鍵字搜尋欄輸入test1 test2可以查詢包含test1或test2的SQL日誌。

  • 線上查詢不支援模糊查詢。

  • 線上查詢的關鍵字至少包含4個字元。

  • 審計記錄支援通過線程ID和事務ID查詢SQL語句記錄。

    說明
    • 通過事務ID查詢前需將loose_rds_audit_log_version參數值設為MYSQL_V3。詳見RDS MySQL 8.0開放參數一覽表

    • MySQL 8.0支援通過事務ID查詢的小版本為20210930以上,MySQL 5.7小版本為20210630以上。

  • SQL洞察和審計記錄的SQL語句最大長度為8192位元組,並且SQL語句最大長度受loose_rds_audit_max_sql_sizeloose_rds_audit_log_event_buffer_size參數控制,參數取值範圍為[0,32768],單位為位元組:

    • 當參數取值小於等於8192位元組時,SQL語句最大長度為參數設定值,超過部分不再記錄。由於資訊採集處理時會增加首碼標註,實際記錄的SQL語句最大長度略小於參數設定值。

    • 當參數取值大於8192位元組時,SQL語句最大長度為8192位元組,超過部分不再記錄。由於資訊採集處理時會增加首碼標註,實際記錄的SQL語句最大長度略小於8192位元組。

    說明
    • RDS MySQL 5.6、5.7版本支援loose_rds_audit_max_sql_size參數控制記錄長度。

    • RDS MySQL 8.0版本支援loose_rds_audit_log_event_buffer_size參數控制記錄長度。

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

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

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

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

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

開啟SQL洞察和審計

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

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

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

  2. 在左側導覽列中,選擇自治服務 > SQL洞察和審計

  3. 點擊開啟企業版V3。

  4. 勾選需要開啟的功能,點擊提交

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

警告

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

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

  2. 在左側導覽列中,選擇自治服務 > SQL洞察和審計

  3. 單擊服務設定

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

關閉SQL洞察和審計

警告

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

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

  2. 在左側導覽列中,選擇自治服務 > SQL洞察和審計

  3. 搜索頁簽的日誌列表地區,單擊匯出

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

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

  6. 服務設定頁,去掉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:為什麼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洞察和審計。詳情請參見產品系列及支援的功能