后端开发必备的 MySQL 日志文件知识点( 二 )

但是使用 set global slow_query_log='ON' 开启慢查询日志 , 只是对当前数据库有效 , 如果MySQL数据库重启后就会失效 。所以如果要永久生效 , 就要修改配置文件 my.cnf (其他系统变量也是如此) , 如下:
[mysqld]slow_query_log=1然后重启MySQL就可以让慢查询日志记录开启了,至于日志文件的路径就是上面slow_query_log_file对应的路径 。
设置阈值mysql> show variables like 'long_query_time';+-----------------+-----------+| Variable_name   | Value     |+-----------------+-----------+| long_query_time | 10.000000 |+-----------------+-----------+1 row in set (0.00 sec)阈值默认为10秒 , 我们可以修改阈值大小 , 比如(当然这还是对当前数据库有效):
mysql> set global long_query_time=0.05;Query OK, 0 rows affected (0.00 sec)设置long_query_time这个阈值之后 , MySQL数据库会记录运行时间超过该值的所有SQL语句 , 但对于运行时间正好等于 long_query_time 的情况 , 并不会被记录下 。而设置 long_query_time为0来捕获所有的查询
参数log_queries_not_using_indexes另一个和慢查询日志有关的参数是 log_queries_not_using_indexes,
如果运行的SQL语句没有使用索引 , 则MySQL数据库同样会将这条SQL语句记录到慢查询日志文件 。首先确认打开了log_queries_not_using_indexes;
mysql> show variables like 'log_queries_not_using_indexes';+-------------------------------+-------+| Variable_name                 | Value |+-------------------------------+-------+| log_queries_not_using_indexes | ON    |+-------------------------------+-------+1 row in set (0.12 sec)例子 , 没有用到索引进行查询:
mysql> explain select * from vote_record_memory where vote_id = 323;+----+-------------+--------------------+------+---------------+------+---------+------+--------+-------------+| id | select_type | table              | type | possible_keys | key  | key_len | ref  | rows   | Extra       |+----+-------------+--------------------+------+---------------+------+---------+------+--------+-------------+|  1 | SIMPLE      | vote_record_memory | ALL  | NULL          | NULL | NULL    | NULL | 149272 | Using where |+----+-------------+--------------------+------+---------------+------+---------+------+--------+-------------+1 row in set (1.56 sec)可以看到是进行了全表扫描;然后去log日志文件中查看这条SQL已经被标记为慢SQL , 因为它没有使用索引 。
# Time: 180817 11:42:59# User@Host: root[root] @  [117.136.86.151]  Id:  2625# Query_time: 0.016542  Lock_time: 0.000112 Rows_sent: 142  Rows_examined: 149272SET timestamp=1534477379;select * from vote_record_memory where vote_id = 323;    将日志记录放入表中MySQL5.1开始可以将慢查询的日志记录放入一张表中 , 在mysql数据库下 , 名为slow_log
| slow_log | 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,  `thread_id` bigint(21) unsigned NOT NULL) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' |


推荐阅读