暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mysql慢查询日志相关参数设置

wzf0072 2024-01-16
62

Mysql慢查询日志相关参数设置

慢查询日志,就是查询超过一定的时间没有返回结果的时候,MySQL会将执行的SQL记录到日志中,这个日志,就称为慢查询日志。通过分析慢查询日志,可以快速找出执行慢的SQL语句,然后进行优化。

慢查询主要的参数如下,后面会具体说明这几个参数:

+---------------------------------------+----------------------------------+---------------------------------------------
| Variable_name                         | Value                            | Content                                     
+---------------------------------------+----------------------------------+---------------------------------------------
| slow_query_log                        | OFF                              |开启慢查询                                   
| long_query_time                       | 10.000000                        |慢查询时间阈值,执行时间超过阈值的SQL才会记录
| log_output                            | FILE                             |慢查询日志存储形式:FILE、TABLE              
| slow_query_log_file                   | /var/lib/mysql/hostname-slow.log |慢日志存放位置                               
| log_queries_not_using_indexes         | OFF                              |记录任何不使用索引的sql                      
| log_throttle_queries_not_using_indexes| 0                                |每分钟允许记录到slow log的且未使用索引的SQL语句次数
+---------------------------------------+----------------------------------+---------------------------------------------

慢查询日志相关参数
1、是否启用慢查询日志(slow_query_log)
默认情况下,MySQL并不开启慢查询日志,需要手动开启

show variables like 'slow_query_log';
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF |
+----------------+-------+
1 row in set (0.02 sec)
通过修改MySQL配置文件开启慢查询日志



2、记录慢查询SQL时间(long_query_time)
慢查询日志还有一个重要参数 long_query_time,MySQL默认慢查询日志时间为10秒,通过修改long_query_time这个阈值来修改默认大小。 设置long_query_time的值后,MySQL数据库会记录执行时间超过该值的所有SQL语句,执行时间正好等于long_query_time的SQL语句并不会被记录下来。

mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
slow_query_log=on --开启慢查询日志
slow_query_log_file=slow-log --指定保存路径及文件名,默认为数据文件目录,hostname-slow.log
long_query_time=1 --指定多少秒返回查询的结果为慢查询

是否记录没有使用索引的SQL(log_queries_not_using_indexes)
另一个和慢查询日志有关的参数是log_queries_not_using_indexes,如果运行的SQL语句没有使用索引,则MySQL数据库同样会将这条SQL语句记录到慢查询日志文件。

mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
1 row in set (0.00 sec)

开启没有使用索引记录慢查询日志的阈值

mysql> set global log_queries_not_using_indexes=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON |
+-------------------------------+-------+
1 row in set (0.00 sec)

 log_throttle_queries_not_using_indexes

MySQL 5.6.5版本开始新增了一个参数log_throttle_queries_not_using_indexes,用来表示每分钟允许记录到slow log的且未使用索引的SQL语句次数。该值默认为0,表示没有限制。在生产环境下,若没有使用索引,此类SQL语句会频繁地被记录到slow log,从而导致slow log文件的大小不断增加。

mysql> show variables like 'log_throttle_queries_not_using_indexes';
+----------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------+-------+
| log_throttle_queries_not_using_indexes | 0 |
+----------------------------------------+-------+
1 row in set (0.00 sec)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论