數據庫自治服務DAS提供搜索(審計)功能,查詢并導出SQL語句對應的各種信息,本文介紹如何在SQL洞察和審計中使用搜索功能。
如果您開通了DAS企業版 V3,搜索功能將更名為審計功能。
前提條件
已在DAS中接入對應的數據庫實例,并且接入狀態顯示為接入正常。
實例已開啟SQL洞察和審計,詳情請參見開啟SQL洞察和審計。
通過RAM用戶使用搜索功能時,需要為RAM用戶授予AliyunHDMReadOnlyWithSQLLogArchiveAccess權限,詳情請參見通過系統權限策略授權子賬號。
說明您也可以通過自定義權限策略授予RAM用戶使用搜索(包含導出)功能的權限,詳情請參見通過自定義權限策略授權RAM用戶使用SQL洞察和審計的搜索(包含導出)功能。
注意事項
日志列表中SQL語句的狀態為成功時,只表示該條SQL執行成功且沒有異常。例如,發生事務回滾時,事務中的單條SQL執行成功且沒有異常,那么日志列表中該條SQL的狀態會標識為成功。
對于RDS MySQL和PolarDB MySQL版實例,由于連接可能會被復用,所以日志列表中顯示的IP地址和端口,可能會與客戶端實際的IP地址和端口不一致。詳情請參見RDS MySQL的連接池或PolarDB MySQL版的連接池。
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參數控制記錄長度。
開啟高級查詢時,當數據庫實例的版本滿足如下要求時,支持使用事務ID進行查詢。
RDS MySQL的大版本為8.0且小版本大于等于20210311,并且查詢前需將loose_rds_audit_log_version參數值設為MYSQL_V3。詳見RDS MySQL 8.0開放參數一覽表。
PolarDB MySQL版的版本大于等于8.0.1.1.15。
操作步驟
登錄DAS控制臺。
在左側導航欄中,單擊實例監控。
找到目標實例,單擊實例ID,進入目標實例詳情頁。
在左側導航欄單擊SQL洞察和審計,然后在右側打開的頁面單擊搜索,設置如下參數作為查詢條件。
如果您開通了DAS企業版 V3,請在右側打開的頁面單擊審計。
參數
說明
時間范圍
根據實際需要選擇查詢的時間范圍。
在線查詢時間范圍最多為24小時,您可以在數據庫實例SQL數據存儲時長范圍內設置任意的查詢開始時間,查看最多24小時的數據。這是因為SQL洞察記錄所有數據庫行為,會記錄大量SQL語句,在線查詢選擇時間范圍過大,會導致長時間沒有返回查詢結果,甚至查詢超時。
說明只能查詢開啟DAS企業版后且在SQL數據存儲時長范圍內的數據。
如果需要查詢更大時間范圍的SQL記錄,請您導出后進行查詢。導出功能會異步導出日志,適合大時間范圍內的查詢。
當SQL洞察和審計的數據采用冷熱混合存儲時,當前只支持查詢和導出最多24小時的數據。
關鍵字
可多字段組合查詢,不支持模糊查詢,字段間以空格分隔。
說明查詢的關鍵字至少包含4個字符。
用戶
用戶名,可組合查詢,如:user1 user2 user3。
數據庫
可組合查詢,如:DB1 DB2 DB3。
操作類型
選擇需要查詢的操作類型,可多選。
說明您可開啟高級查詢輸入更多信息以縮小搜索范圍。
單擊查詢,即可看到日志列表中SQL語句的具體信息。
您可單擊導出,勾選需要的導出字段來導出SQL記錄。通過設置導出時間范圍來導出更大時間范圍的SQL記錄。
對于采用冷熱混合存儲的SQL洞察和審計,導出數據時,請選擇SQL日志中不包含的CSV分隔符,并參見設置并打開導出的CSV文件,使導出數據可以分列顯示。
重要單次最多可導出1000萬條數據。
對于采用冷熱混合存儲的SQL洞察和審計,查詢或導出冷存儲的數據時,系統會創建對應的查詢或導出任務,您可以在任務列表頁面,查看任務進度及歷史任務。
對于企業版 V0 和V1,DAS將保存最近2天內的導出記錄;而對于企業版 V2 和V3,DAS將保存最近7天內的導出記錄。
設置并打開導出的CSV文件
當導出的SQL日志包含數據分隔符時,使用Excel等工具打開CSV文件時可能會出現數據沒有分列顯示的現象。為了避免該問題,采用冷熱混合存儲的搜索功能在導出CSV文件時,增加了可供選擇的CSV分隔符。本文以Windows系統下的Excel 2019版為例,介紹如何設置CSV文件,使導出數據可以分列顯示。
創建導出任務時,在提示界面,選擇SQL日志中不包含的分隔符,例如
$
。使用Excel工具打開導出的CSV文件。
選中需要分列顯示的數據,在Excel工具欄中選擇數據 > 分列。
在文本分列向導的原始數據類型區域,選擇分隔符號,單擊下一步。
在分隔符號區域,選擇其他并輸入
$
,單擊下一步。在數據預覽區域,可預覽分列的效果。
在列數據格式區域,選擇常規,單擊完成。
常見問題
A:數據庫實例開啟了query_cache_type
。日志列表中,SQL語句的掃描行數統計的是在InnoDB引擎層掃描的行數,開啟query_cache_type
后,MySQL會嘗試將查詢結果緩存起來,如果后續有相同的查詢請求到來,且查詢緩存命中,則不會再到InnoDB層進行查詢,直接返回緩存結果。因此,實際有數據返回,但日志列表中統計的掃描行數為0。
對于RDS MySQL,詳情請參見Fast Query Cache。
對于PolarDB MySQL版,詳情請參見Fast Query Cache。
A:對于RDS PostgreSQL實例,執行失敗的SQL會被記錄在實例的錯誤日志中,而不會被記錄在審計日志中。查詢實例的錯誤日志請參見查看日志。
A:日志列表中所展示的數據庫名稱是從會話中獲取的,而SQL語句中的數據庫名稱則由用戶指定,取決于用戶的輸入或查詢的設計,例如跨數據庫查詢、動態SQL等場景。兩者之間可能存在不一致的情況。
相關API
對于RDS MySQL、RDS PostgreSQL和RDS SQL Server數據庫實例,可以使用如下API接口查詢SQL日志:
API | 描述 |
查詢RDS實例的SQL洞察(SQL審計)日志。 | |
查詢SQL洞察(SQL審計)導出文件列表。 |