概述
本文主要介紹在使用云數據庫RDS MySQL版實例時,實時查詢慢日志slow_log的方法。
用戶告知
- 本文僅闡述實時查詢slow_log的方法,文中的操作示例未通過where語句進行條件過濾,因此屬于全表查詢。建議您在操作時,通過where語句增加條件過濾,避免慢查詢結果太多導致查詢時間長等情況。
- 云數據庫RDS MySQL v5.5版實例不支持直接查詢慢日志slow_log。您可以通過管理控制臺查詢慢日志,詳情請參見查看慢日志明細中通過控制臺查詢慢日志的章節。
詳細信息
云數據庫RDS MySQL版實例的版本不同,對應的查詢方式不同,詳情如下。
RDS MySQL v5.6版本
實時查詢慢日志slow_log的步驟如下:
- 登錄您的MySQL實例。關于如何登錄MySQL實例,請參見連接MySQL實例。
- 執行以下SQL語句,直接查詢慢日志slow_log。
SELECT * FROM mysql.slow_log;
RDS MySQL v5.7版本和RDS MySQL v8.0版本
RDS MySQL v5.7版本和RDS MySQL v8.0版本中,慢日志slow_log表的sql_text列是blob類型。在查詢時需要進行轉換,操作方法有以下兩種。
查詢時通過CONVERT方法轉換sql_text列的類型
查詢慢日志slow_log時,通過CONVERT方法轉換sql_text列為UTF-8字符集,操作步驟如下:
- 登錄您的MySQL實例。關于如何登錄MySQL實例,請參見連接MySQL實例。
- 執行以下SQL語句,查詢慢日志slow_log。
SELECT start_time, user_host, query_time, lock_time, rows_sent, rows_examined, db, CONVERT(sql_text USING utf8) FROM mysql.slow_log;
通過中間表導入slow_log表的數據
創建一個UTF-8字符集的slow_log_tmp表,并設定sql_text列為varchar類型,導入slow_log表數據后進行查詢。
說明:此方法等同于備份slow_log表,RDS不會自動清理新創建的slow_log_tmp表。因此,此方法會占用RDS實例的存儲空間。
- 登錄您的MySQL實例。關于如何登錄MySQL實例,請參見連接MySQL實例。
- 執行以下SQL語句,在其他數據庫下創建一個UTF-8字符集的slow_log_tmp表。創建該表時,設定sql_text列為varchar類型,其他列與slow_log表一致。
CREATE TABLE `test`.`slow_log_tmp` (
`start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`user_host` mediumtext NOT NULL,
`query_time` time(6) NOT NULL,
`lock_time` time(6) NOT NULL,
`rows_sent` int(11) NOT NULL,
`rows_examined` int(11) NOT NULL,
`db` varchar(512) NOT NULL,
`last_insert_id` int(11) NOT NULL,
`insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`sql_text` varchar(2000) NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log tmp';說明:本文在test數據庫新建名為slow_log_tmp為例。您可以根據現場實際情況調整該表的名稱和所在數據庫。
- 執行以下SQL語句,將slow_log表的數據導入slow_log_tmp表。
INSERT INTO test.slow_log_tmp SELECT * FROM mysql.slow_log;
- 執行以下SQL語句,在新建的slow_log_tmp表查詢慢日志slow_log。
SELECT * FROM test.slow_log_tmp;
適用于
-
云數據庫RDS MySQL版
文檔內容是否對您有幫助?