警告

警告

我正在尝试分析系统上的慢速查询,并且我读到我应该启用“慢速查询日志”。我很好奇当我使用托管在 Amazon Web Service 的 RDS 上的 MySQL 实例时如何查看此日志。

答案1

你知道慢日志表吗?它被称为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>

您必须激活两个变量才能开始在 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>

日志输出已默认为TABLE。您需要启用慢查询日志。您必须执行以下操作:

如果您的 RDS 实例没有数据库参数组...

  1. 启动使用数据库参数组的 AmazonRDS MySQL 实例。
  2. 通过将 slow_query_log 设置为 1 来编辑数据库参数组
  3. 重启数据库实例

如果您的 RDS 实例具有数据库参数组...

  1. 通过将 slow_query_log 设置为 1 来编辑数据库参数组
  2. 重启数据库实例

实例重新启动后,登录 mysql 并运行此查询

mysql> SELECT SLEEP(15);

由于默认长查询时间是 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);

然后,您可以非常快速地查询日期和时间范围。我尝试运行它,得到了以下结果:

mysql> ALTER TABLE mysql.slow_log ENGINE=MyISAM;
ERROR 1044 (42000): Access denied for user 'lwdba'@'%' to database 'mysql'
mysql>

检查 RDS 文档以了解亚马逊是否可以为您做到这一点。

试一试 !!!

答案2

您还可以将表复制到不同数据库中的新表,并将新表设为 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 就允许这样做。

相关内容