SQL洞察功能可對SQL進行健康情況診斷、性能問題排查。本文介紹在SQL洞察和審計中進行SQL洞察的操作步驟。
前提條件
已在DAS中接入對應的數據庫實例,并且接入狀態顯示為連接正常。
實例已開啟SQL洞察和審計,詳情請參見開啟SQL洞察和審計。
功能說明
開啟SQL洞察功能可以記錄所有DQL、DML和DDL操作信息,這些信息是通過數據庫內核輸出,對系統CPU消耗極低。
支持的數據庫和地域
開啟DAS企業版后,才可以使用該企業版提供的SQL洞察和審計功能,不同的企業版支持的數據庫和地域不同。各個企業版支持的數據庫和地域請參見各個版本支持的數據庫和地域。
注意事項
SQL洞察功能中分析和統計數據(不包括SQL明細數據)的存儲時長為30天。
SQL洞察功能中SQL明細數據的存儲時長與DAS企業版設置的存儲時長一致。
關閉SQL洞察和審計功能后,不會對業務產生影響,但是SQL洞察和審計的所有存儲數據會被清空,請將數據導出并保存至本地后,再關閉SQL洞察和審計功能。詳情請參見關閉SQL洞察和審計。
掛載到PolarDB-X 1.0(DRDS)的RDS MySQL實例執行一條SQL語句時,由于水平拆分(分庫分表)原因,會在RDS MySQL實例上產生多條SQL日志。
數據庫實例的數據遷移會引起閃斷,遷移期間SQL洞察丟失部分數據是符合預期的。
當數據庫實例負載非常高時,會丟失少量記錄,因此通過SQL洞察來統計增量數據可能會出現不準確的情況。
SQL洞察中記錄的SQL語句最大長度為8192字節,超過部分不再記錄。其中RDS MySQL和PolarDB MySQL版實例記錄的SQL語句最大長度受參數控制:
當參數取值小于等于8192字節時,SQL語句最大長度為參數設定值,超過部分不再記錄。由于信息采集處理時會增加前綴標注,實際記錄的SQL語句最大長度略小于參數設定值。
當參數取值大于8192字節時,SQL語句最大長度為8192字節,超過部分不再記錄。由于信息采集處理時會增加前綴標注,實際記錄的SQL語句最大長度略小于8192字節。
說明RDS MySQL和PolarDB MySQL版的5.6、5.7版本由loose_rds_audit_max_sql_size參數控制記錄長度。
RDS MySQL和PolarDB MySQL版的8.0版本由loose_rds_audit_log_event_buffer_size參數控制記錄長度。
對于RDS PostgreSQL實例,如果啟用了PgBouncer連接池,通過PgBouncer執行的SQL不會被SQL洞察記錄。
操作步驟
登錄DAS控制臺。
在左側導航欄中,單擊實例監控。
找到目標實例,單擊實例ID,進入目標實例詳情頁。
在左側導航欄單擊 ,然后在右側打開的頁面單擊SQL洞察。
根據需要選擇對應的功能項:
說明選擇時間范圍時,查詢結束時間需晚于查詢開始時間,且查詢開始時間和查詢結束時間的間隔不能超過1天。您可以查詢數據庫實例開啟DAS企業版后,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 Review。
相關SQL識別:選擇需要查看的指標,單擊分析按鈕,經過1~5分鐘的時間,即可以定位到在選定時間范圍內和相關指標變化趨勢最相似的SQL及其詳細信息。
重要對于采用冷熱混合存儲的SQL洞察和審計,超過7天的SQL洞察和審計數據采用冷存儲,分析7天前的SQL明細數據時,系統會創建對應的任務重新進行計算和分析,您可以在任務列表頁面,查看任務進度及歷史任務。
查詢分析超過7天的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字符集。
常見問題
A:logout!
是指連接斷開。logout!
的耗時,是指上一次交互時間到logout!
發生時間的差值,可以理解為連接空閑的時長。狀態列的1158是指網絡鏈接斷開,其可能的原因是:
客戶端連接超時。
服務端異常斷開。
服務端連接Reset(超過interactive_timeout或wait_timeout時長)。
A:該情況可能在您使用存儲過程時出現。按如下示例可以復現這種情況:
示例中數據庫實例為RDS MySQL,測試賬號為test_user,測試數據庫為testdb。
在RDS控制臺創建普通權限賬號及其授權的數據庫,詳細操作請參見創建數據庫和賬號。
使用測試賬號通過命令行方式連接數據庫實例,詳細操作請參見通過客戶端、命令行連接RDS MySQL實例。
切換到測試數據庫,并創建如下存儲過程。
-- 切換到測試數據庫 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;
使用高權限賬號連接數據庫實例,詳細操作請參見通過客戶端、命令行連接RDS MySQL實例。
調用存儲過程。
-- 切換到測試數據庫 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() | +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+
A:日志列表中所展示的數據庫名稱是從會話中獲取的,而SQL語句中的數據庫名稱則由用戶指定,取決于用戶的輸入或查詢的設計,例如跨數據庫查詢、動態SQL等場景。兩者之間可能存在不一致的情況。
相關API
API | 描述 |
異步查詢數據庫實例SQL洞察結果中執行錯誤的SQL樣本數據,最多返回指定時間范圍內20條數據。 | |
異步獲取數據庫實例SQL洞察結果中指定SQL的執行錯誤次數。 | |
異步查詢數據庫實例SQL洞察結果中產生指定MySQL錯誤碼的SQL ID。 | |
異步查詢數據庫實例SQL洞察結果中的MySQL錯誤碼以及每個錯誤碼對應的SQL數量。 | |
按照訪問來源統計數據庫實例SQL洞察結果中的全量請求數據。 | |
按照SQL ID異步統計數據庫實例SQL洞察結果中的全量請求數據。 | |
按照SQL ID查詢數據庫實例SQL洞察結果中的SQL樣本數據,最大返回20條樣本數據。 | |
查詢數據庫實例7天內SQL洞察和審計的熱存儲數據明細。 |