我正在尝试分析系统上的慢查询,我读到我应该启用“慢查询日志”。我很好奇当我使用 Amazon Web Service 的 RDS 上托管的 MySQL 实例时如何查看此日志。
Rol*_*DBA 10
你知道有慢日志表吗?它被称为mysql.slow_log:
mysql> show create table mysql.slow_log\G
*************************** 1. row ***************************
Table: slow_log
Create Table: CREATE TABLE `slow_log` (
`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`query_time` time NOT NULL,
`lock_time` time 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` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
1 row in set (0.01 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
您必须激活两个变量才能开始在 mysql.slow_log 中记录慢查询:
这是情况
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | TABLE |
+---------------+-------+
1 row in set (0.01 sec)
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF |
+----------------+-------+
1 row in set (0.01 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
log_output已经默认为TABLE. 您将需要启用slow_query_log。这是你必须做的:
实例重新启动后,登录到 mysql 并运行此查询
mysql> SELECT SLEEP(15);
Run Code Online (Sandbox Code Playgroud)
由于long_query_time的默认值为 10 秒,因此查询SELECT SLEEP(15);应显示在mysql.slow_log. 阅读 RDS 文档以查看表上是否有任何限制。
这是一个公平的警告。注意mysql.slow_log是一个 CSV 文件。桌子没有钥匙。虽然您可以查询表,但它会进行全表扫描。如果您可以执行以下操作,那就太好了:
ALTER TABLE mysql.slow_log ENGINE=MyISAM;
ALTER TABLE mysql.slow_log ADD INDEX (start_time);
Run Code Online (Sandbox Code Playgroud)
然后,您可以非常快速地查询日期和时间范围。我试图运行它,我得到了这个:
mysql> ALTER TABLE mysql.slow_log ENGINE=MyISAM;
ERROR 1044 (42000): Access denied for user 'lwdba'@'%' to database 'mysql'
mysql>
Run Code Online (Sandbox Code Playgroud)
查看 RDS 文档以了解 Amazon 是否可以为您执行此操作。
试一试 !!!
| 归档时间: |
|
| 查看次数: |
9433 次 |
| 最近记录: |