千家信息网

MySQL慢日志实践小结

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,慢日志查询作用慢日志查询的主要功能就是,记录sql语句中超过设定的时间阈值的查询语句。例如,一条查询sql语句,我们设置的阈值为1s,当这条查询语句的执行时间超过了1s,则将被写入到慢查询配置的日志中
千家信息网最后更新 2026年11月02日MySQL慢日志实践小结

慢日志查询作用

慢日志查询的主要功能就是,记录sql语句中超过设定的时间阈值的查询语句。例如,一条查询sql语句,我们设置的阈值为1s,当这条查询语句的执行时间超过了1s,则将被写入到慢查询配置的日志中.

慢查询主要是为了我们做sql语句的优化功能.

慢查询配置项说明

登录mysql服务,使用如下命令

mysql> show variables like '%query%';+------------------------------+-----------------------------------------+| Variable_name        | Value                  |+------------------------------+-----------------------------------------+| binlog_rows_query_log_events | OFF                   || ft_query_expansion_limit   | 20                   || have_query_cache       | YES                   || long_query_time       | 10.000000                || query_alloc_block_size    | 8192                  || query_cache_limit      | 1048576                 || query_cache_min_res_unit   | 4096                  || query_cache_size       | 33554432                || query_cache_type       | OFF                   || query_cache_wlock_invalidate | OFF                   || query_prealloc_size     | 8192                  || slow_query_log        | OFF                   || slow_query_log_file     | /usr/local/mysql/var/localhost-slow.log |+------------------------------+-----------------------------------------+13 rows in set (0.01 sec)

这里,我们只需要关注三个配置项即可。

1.slow_query_log

该配置项是决定是否开启慢日志查询功能,配置的值有ON或者OFF.

2.slow_query_log_file

该配置项是慢日志查询的记录文件,需要手动创建.

3.long_query_time

该配置项是设置慢日志查询的时间阈值,当超过这个阈值时,慢日志才会被记录.配置的值有0(任何的sql语句都记录下来),或者>0(具体的阈值).该配置项是以秒为单位的,并且可以设置为小数.

4.log-queries-not-using-indexes

该配置项是为了记录未使用到索引的sql语句.

如何配置慢查询

配置慢查询功能的方式有两种,一种是使用mysql的配置文件配置,另外一种是使用mysql命令配置.这里建议使用配置文件配置,因为在命令配置的过程中发现有时候配置项在set命令的时候是成功了,但是查询还是没设置。

1.配置文件配置

// 找到[mysqld],在其下面添加如下代码即可.slow_query_log=ONslow_query_log_file=/usr/local/mysql/var/localhost-slow.loglong_query_time=0log-queries-not-using-indexes = 1// 配置好后,重启mysql服务

2.使用命令配置

// 这里就简单些一个配置项就行了,其他的配置项均按照此方法配置mysql> set slow_query_log=ON;

配置好之后,查看mysql慢查询日志是否配置成功.

mysql> show variables like '%query%';+------------------------------+-----------------------------------------+| Variable_name        | Value                  |+------------------------------+-----------------------------------------+| binlog_rows_query_log_events | OFF                   || ft_query_expansion_limit   | 20                   || have_query_cache       | YES                   || long_query_time       | 0.000000                || query_alloc_block_size    | 8192                  || query_cache_limit      | 1048576                 || query_cache_min_res_unit   | 4096                  || query_cache_size       | 33554432                || query_cache_type       | OFF                   || query_cache_wlock_invalidate | OFF                   || query_prealloc_size     | 8192                  || slow_query_log        | ON                   || slow_query_log_file     | /usr/local/mysql/var/localhost-slow.log |+------------------------------+-----------------------------------------+13 rows in set (0.01 sec)

如何查看慢日志记录

在配置慢查询之前,我们已经导入了示例的数据文件,这里就不做单独的演示了。mysql官方数据库示例 。接下来,我们就开始做查询操作.

mysql> select * from city where city='Salala';+---------+--------+------------+---------------------+| city_id | city  | country_id | last_update     |+---------+--------+------------+---------------------+|   444 | Salala |     71 | 2006-02-15 04:45:25 |+---------+--------+------------+---------------------+1 row in set (0.01 sec)

此时,我们根据配置的慢查询日志记录文件/usr/local/mysql/var/localhost-slow.log,发现该文件记录了上面的命令操作.

# Time: 2019-01-17T08:12:27.184998Z# User@Host: root[root] @ localhost [] Id:   4# Query_time: 0.002773 Lock_time: 0.001208 Rows_sent: 1 Rows_examined: 600SET timestamp=1547712747;select * from city where city='Salala';

上诉文件配置内容说明

1.Time

该日志记录的时间

2.User@Host

MySQL登录的用户和登录的主机地址

3.Query_time一行

第一个时间是查询的时间、第二个是锁表的时间、第三个是返回的行数、第四个是扫描的行数

4.SET timestamp

这一个是MySQL查询的时间

5.sql语句

这一行就很明显了,表示的是我们执行的sql语句

总结

由于我们配置long_query_time=0,因此所有的sql语句都将被记录下来,这里我们假设,仅仅是假设。我们设置的long_query_time=5,然而上面的第三项中Query_time大于5,如果是实际项目中不属于正常范围,则需要对其进行优化,当然优化的方式有很多种,下面我们使用简单的索引方式进行优化一下。

优化sql语句

1.先查看原本的sql语句执行结构

mysql> explain select * from city where city='Salala'\G;*************************** 1. row ***************************      id: 1 select_type: SIMPLE    table: city  partitions: NULL     type: ALLpossible_keys: NULL     key: NULL   key_len: NULL     ref: NULL     rows: 600   filtered: 10.00    Extra: Using where1 row in set, 1 warning (0.00 sec)mysql> create index idx_cityName on city(`city`);Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0

看得出,该sql语句是进行了全盘扫描。我们则用索引对其简单的优化一下。

2.创建索引

mysql> create index idx_cityName on city(`city`);Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0

3.在用explain分析一次

mysql> explain select * from city where city='Salala'\G;*************************** 1. row ***************************      id: 1 select_type: SIMPLE    table: city  partitions: NULL     type: refpossible_keys: idx_cityName     key: idx_cityName   key_len: 152     ref: const     rows: 1   filtered: 100.00    Extra: NULL1 row in set, 1 warning (0.00 sec)

通过创建索引,我们发现此时只扫描了一行,并且是使用的索引扫描,因此大大提高了一个mysql查询的效率。

MySQL慢查询使用总结

在平常的开发中,慢查询作为MySQL优化的一个途径,是非常有用的。它会记录下我们一些查询时间长的sql语句,对其语句我们进行分析,从而达到sql查询语句的最优化。但是慢日志查询开启之后,针对sql查询会通过磁盘I/O将相关的记录写入到磁盘文件中,增加了一个磁盘的I/O读写。因此,我们该功能用在开发、测试环境上,而不用在生产环境中去。

慢日志查询工具

由于慢日志查询文件越到后期,内容越多。我们对其分析的压力越大,因此我们需要借助某些工具实现快速分析。这些工具还没完全使用熟悉,后期单独写一篇文章介绍该类型的工具,这里只是罗列一下工具名称。
1.mysqldumpslow
2.pt-query-digest
3.mysqltop(天兔Lepus)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

配置 查询 语句 日志 文件 时间 命令 索引 功能 工具 阈值 分析 一行 内容 方式 磁盘 登录 成功 三个 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 科技互联网产品 互联网为科技 智网互联网科技 迪茉互联网科技 顺玮阁互联网科技 长亮科技 互联网金融 互联网实体化科技化 互联网科技产品 受益于互联网科技的高速发展 彤创互联网科技有限公司 华中科技大学互联网的牛人 互联网时代的科技公司 富国互联网科技002692 从那以后互联网科技有限公司 有人说阿里系是互联网科技企业 长沙渺峰互联网科技有限公司 互联网领先科技活动 玉溪新华互联网科技怎么选 每日互联网科技新闻 上海互联网科技有限公司 长亮科技 互联网金融 银川新华互联网科技职业技术培训学校图片 互联网金融中的现代科技 千方科技属于互联网企业吗 美国互联网科技实力 有人说阿里系是互联网科技企业 神州科技互联网有限公司 山东蛋芒互联网科技有限公司 互联网的黑科技实验室
0