PolarDB MySQL版的SQL洞察功能已升級為SQL洞察與審計,該服務由資料庫自治服務(DAS)提供。搜尋(審計)功能能夠全量採集SQL明細,使您能夠查詢並匯出SQL語句及其相關資訊(例如,執行SQL的資料庫、使用者或用戶端IP等)。SQL洞察功能能夠對SQL進行健康情況的診斷、效能問題的排查以及業務流量的分析,從而提升故障診斷、資料庫最佳化與風險發現的效率。
功能介紹
資料庫自治服務DAS在全量請求和安全審計的基礎上,融合了搜尋、SQL洞察、安全審計以及流量回放和壓測等功能,協助您更好地擷取SQL語句的具體資訊、排查各種效能問題、識別高危風險來源、驗證叢集規格是否需要擴容,有效應對業務流量高峰。
搜尋功能:查詢並匯出SQL語句及對應的各種資訊,如資料庫、狀態、執行時間等,詳情請參見審計。
SQL洞察功能:對SQL進行健康情況診斷、效能問題排查、業務流量分析等,詳情請參見SQL洞察。
SQL Review功能:提供全域SQL負載分析能力,輔助使用者快速定位到資料庫執行個體中的可疑SQL,並對可疑SQL進行分析,給出相應的最佳化建議,具體操作請參見SQL Review。
流量回放和壓測功能:提供流量回放和壓測功能,協助您驗證您的執行個體規格是否需要擴容,有效應對業務流量高峰,具體操作請參見流量回放和壓測。
安全審計功能:可自動識別高危SQL、SQL注入、新增訪問來源等風險,詳情請參見安全審計。
事務分析功能:通過事務分析功能,您可以獲知指定時間段內某線程的事務類型、事務數量及事務詳情,便於從事務層面瞭解、分析和最佳化資料庫效能,具體操作請參見事務分析。
快速事務分析功能:通過快速事務分析功能,可以獲知待分析SQL所在事務的開始語句和結束語句,從而獲知事務的提交或復原情況,具體操作請參見快速事務分析。
支援地區
開啟DAS企業版後,才可以使用該企業版提供的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洞察和審計
登入PolarDB控制台,在左側導覽列單擊集群列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。
在左側導覽列中,選擇。
單擊開啟SQL洞察。
說明如果您當前的阿里雲帳號未開通DAS企業版,請按照介面提示,開通DAS企業版。
在右側頁面中單擊對應功能頁簽即可查看相關資訊。
搜尋(審計):查詢並匯出SQL語句及對應的各種資訊,如資料庫、狀態、執行時間等。
SQL洞察:
區間查看:選擇需要查看SQL洞察結果的時間範圍,您可以查看選定時間範圍內所有SQL的執行耗時分布、執行耗時、執行次數。您還可以在全量請求統計地區內查看選定時間範圍內所有SQL的詳細資料,並可以將其匯出到本地。
說明最多支援匯出1000條SQL日誌,如果您需要擷取更大時間範圍或更多數量的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洞察和審計資料存放區時間長度。
登入PolarDB控制台,在左側導覽列單擊集群列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。
在左側導覽列中,選擇。
單擊右上方服務設定。
修改儲存時間長度並單擊確定。
說明如果您開通了DAS企業版V3,您可以修改不同子功能的資料存放區時間長度。
SQL洞察和審計資料的儲存空間是由DAS側提供,不佔用資料庫叢集的儲存空間。
關閉SQL洞察和審計
SQL洞察和審計功能關閉後,SQL審計日誌會被清空。請將SQL審計日誌匯出並儲存至本地後,再關閉SQL洞察和審計功能。當重新開啟SQL洞察和審計功能時,SQL審計日誌將從本次開啟SQL洞察和審計的時間開始記錄。
登入PolarDB控制台,在左側導覽列單擊集群列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。
在左側導覽列中,選擇。
單擊服務設定,關閉SQL洞察和審計。
如果您開通了DAS企業版V3,請去勾選SQL洞察和審計的所有功能。
單擊確定。
查看審計日誌大小和消費明細
登入阿里雲管理主控台,在頁面右上方,選擇費用。
在左側費用與成本導覽列中,選擇 。查看計費項目列為sql_explorer的費用明細。
在賬單詳情頁簽,單擊明細賬單頁簽,設定搜尋執行個體ID進行搜尋。查看計費項目列為sql_explorer的費用明細。

遷移到新版
當前僅華東1(杭州)、華東2(上海)、華北2(北京)和華南1(深圳)地區的資料庫叢集支援將舊版SQL洞察和審計遷移到新版。
登入PolarDB控制台,在左側導覽列單擊集群列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。
在左側導覽列單擊日誌與審計>SQL洞察。
在彈出的SQL洞察升級為“SQL洞察和審計”對話方塊中,單擊一鍵升級。
遷移不同企業版的SQL洞察和審計資料
企業版V2相對於企業版V1,變更了底層儲存架構,通過冷熱混合儲存實現降本增效,使用成本低。而企業版V3,在冷熱混合儲存的基礎上,按使用的功能細分計費項目,計費更加靈活,使用成本更低。
當您的資料庫叢集支援企業版V3時,您可以將DAS企業版V1或V2的資料移轉至企業版V3,以獲得更加優惠的費用,詳情請參見DAS企業版間資料如何遷移?
常見問題
SQL洞察的費用是否可以用資源套件進行抵扣?
不可以。SQL洞察功能的付費方式僅支援隨用隨付,不支援訂用帳戶或使用資源套件進行抵扣。
SQL洞察的全量請求統計地區中的
logout!語句是什嗎?logout!是指串連斷開。logout!的耗時,是指上一次互動時間到logout!發生時間的差值,可以理解為串連閒置時間長度。狀態列的1158是指網路連接斷開,其可能的原因是:用戶端連線逾時。
服務端異常斷開。
服務端串連Reset(超過interactive_timeout或wait_timeout時間長度)。
SQL洞察的來源統計中,為什麼會出現%的訪問來源?
該情況可能在您使用預存程序時出現。按如下樣本可以發現這種情況:
說明以下樣本中資料庫叢集為PolarDB MySQL版,測試帳號為test_user,測試資料庫為test_db。
在PolarDB控制台建立普通許可權帳號及其授權的資料庫,詳細操作請參見建立普通許可權帳號。
使用測試帳號通過命令列方式串連資料庫叢集,詳細操作請參見使用命令列串連叢集。
切換到測試資料庫,並建立如下預存程序。
-- 切換到測試資料庫 USE test_db;-- 建立預存程序 DELIMITER $$ DROP PROCEDURE IF EXISTS `das` $$ CREATE DEFINER=`test_user`@`%` PROCEDURE `das`() BEGIN SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID(); END $$ DELIMITER ;調用預存程序。
-- 切換到測試資料庫 USE test_db;-- 調用預存程序 CALL das();-- 調用結果 +-----------+-----------+---------+---------+---------+------+-----------+-------------------------------------------------------------------------+ | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | +-----------+-----------+---------+---------+---------+------+-----------+-------------------------------------------------------------------------+ | 269660316 | test_user | %:46182 | test_db | Query | 0 | executing | SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID() | +-----------+-----------+---------+---------+---------+------+-----------+-------------------------------------------------------------------------+
為什麼審計日誌列表中展示的資料庫名稱和SQL語句中的不一致?
日誌列表中所展示的資料庫名稱是從會話中擷取的,而SQL語句中的資料庫名稱則由使用者指定,取決於使用者的輸入或查詢的設計,例如跨資料庫查詢、動態SQL等情境。兩者之間可能存在不一致的情況。
開啟SQL洞察和審計對資料庫效能有影響嗎?影響有多大?
有影響。但影響極小,幾乎不會被感知。
具體到資源佔用情況:
CPU、記憶體:消耗極低,幾乎可以忽略。
儲存空間:主要用於儲存審計資訊,但DAS企業版提供的SQL洞察和審計功能使用的是DAS側提供的儲存空間,不佔用資料庫叢集的儲存空間。
網路:不會對網路效能產生影響。
磁碟效能:不會對磁碟效能產生影響,因為審計資料存放區在DAS側,而非資料庫叢集的磁碟上。
在叢集中執行了一條
UPDATE語句,查看審計日誌,該SQL的影響行數為1。然而,表中的資料未能成功更新,仍然是修改之前的狀態。應如何進行排查與解決?排查流程:
在審計日誌中找到這條SQL並擷取線程ID。然後單擊開啟進階查詢,根據線程ID搜尋。查看這個當前線程是否關閉了
AUTOCOMMIT,若關閉了是否有顯式COMMIT。說明建議僅根據線程ID進行過濾搜尋。若返回日誌過多,請根據實際情況組合其他條件進行搜尋,減少日誌量,便與分析定位問題。

若上述方法無法定位問題,可以考慮通過庫表恢複和解析日誌,以確認是否存在修改成功的記錄。
說明在本排查流程中,
UPDATE語句被視為商務邏輯的最後一步。完成此次修改後,資料將保持不變,因此無需進一步檢查後續是否存在修改或刪除。如果後續發生了修改,則需繼續排查是否存在相關的SQL操作導致資料發生變化。問題情境:
關閉AUTOCOMMIT且SQL未提交:根據排查流程發現,此請求在執行過程中關閉了
AUTOCOMMIT,並且執行後未顯式進行COMMIT,導致資料未發生變更,如截圖所示。
線程
ROLLBACK:在同一事務會話中執行的操作要麼全部成功,要麼全部失敗,若發生復原,則所有操作均會被復原。根據排查流程查看是否在此請求執行後有ROLLBACK操作。