我试图分析我的系统上的缓慢的查询,我读了我应该启用“慢查询日志”。我好奇我如何使用Amazon Web Service的RDS上托pipe的MySQL实例来查看此日志。
你知道日志表有慢吗? 它被称为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>
有两个variables,您必须激活才能开始在mysql.slow_log中logging慢速查询:
这是情况
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>
log_output已经默认为TABLE
。 您将需要启用slow_query_log 。 这是你必须做的:
一旦实例重新启动,login到MySQL并运行此查询
mysql> SELECT SLEEP(15);
由于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);
然后,您可以非常快速地查询date和时间范围。 我试图运行这个,我得到这个:
mysql> ALTER TABLE mysql.slow_log ENGINE=MyISAM; ERROR 1044 (42000): Access denied for user 'lwdba'@'%' to database 'mysql' mysql>
检查RDS文档,看看亚马逊能否为您做到这一点。
试一试 !!!
您也可以将表复制到另一个数据库中的新表中,并创build一个新的MyISAM:
create table my_slow_logs as select * from mysql.slow_log; alter table my_slow_logs engine=MyISAM;
(然后select from my_slow_logs...
)
只要您在MySQL数据库之外执行此操作,Amazon RDS就允许这样做。