mysql 服务器中的慢速查询日志

mysql 服务器中的慢速查询日志

我在 Windows 2000 服务器上安装了 MySQL Community Edition 5.1.41。在 my.ini 文件中,我启用了慢查询日志记录并将输出重定向到表。我已将 long_query_time 设置为 10 秒。然后,在运行一些查询后,我检查了慢查询日志表,发现已记录所有执行的查询,并且在数据文件夹中还创建了一个名为 database-slow.log 的文件。有人能告诉我我哪里出错了吗?我正在使用内置的 innodb,并且没有激活 innodb 插件。

谢谢

答案1

首先,我将这些行放在 /etc/my.cnf 中

[mysqld]
log-output=TABLE
slow-query-log
slow-query-log-file=slow-queries.log

当您使用 log_output 为 TABLE 的慢速日志时,不会在 /var/lib/mysql 中创建表。表是在 mysql 文件夹 /var/lib/mysql/mysql 中创建的。默认基于表的慢速日志的存储引擎是 CSV。您可以通过执行以下操作来检查这一点:

use mysql
show tables;

您应该看到表 slow_log

MySQL> show create table 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.00 sec)

以下是如何将慢速日志表的 CSV 文件转换为 MyISAM

SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ENGINE = MyISAM;
SET GLOBAL slow_query_log = @old_log_state;

请记住,转换后的 MyISAM 没有任何索引。

这是一个名为“start_time”的列,它是一个时间戳。您可以随意像这样对其进行索引:

SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ADD INDEX (start_time);
SET GLOBAL slow_query_log = @old_log_state;

请让我们知道结果如何!!!

相关内容