mysql慢日志查询有什么用?本篇文章小编给大家分享一下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 | NO | | long_query_time | 10.000000 | | query_alloc_block_size | 8192 | | query_prealloc_size | 8192 | | slow_query_log | OFF | | slow_query_log_file | /usr/local/mysql/data/seandeMacBook-Pro-slow.log | +------------------------------+--------------------------------------------------+ 8 rows in set (0.00 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=ON slow_query_log_file=/usr/local/mysql/var/localhost-slow.log long_query_time=0 log-queries-not-using-indexes = 1 -- 配置好后,重启mysql服务
2、使用命令配置
-- 这里就简单些一个配置项就行了,其他的配置项均按照此方法配置 mysql> set slow_query_log=ON; -- 如果执行失败,可能是由于没有添加global mysql> set global 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 | NO | | long_query_time | 10.000000 | | query_alloc_block_size | 8192 | | query_prealloc_size | 8192 | | slow_query_log | ON | | slow_query_log_file | /usr/local/mysql/data/seandeMacBook-Pro-slow.log | +------------------------------+--------------------------------------------------+ 8 rows in set (0.01 sec)
如何查看慢查询记录
首先,先将慢查询日志的时间阈值设置为0
mysql> set global long_query_time=0; Query OK, 0 rows affected (0.00 sec)
重启mysql后生效
在配置慢查询之前,已经导入了示例的数据文件。mysql官方数据示例,接下来就开使查询。
mysql> select * from city where Name = 'Salala'; +------+--------+-------------+----------+------------+ | ID | Name | CountryCode | District | Population | +------+--------+-------------+----------+------------+ | 2818 | Salala | OMN | Zufar | 131813 | +------+--------+-------------+----------+------------+ 1 row in set (0.01 sec)
根据配置的慢查询日志记录文件/usr/local/mysql/data/seandeMacBook-Pro-slow.log ,查看以上的命令操作。
# Time: 2019-08-20T09:17:49.791767Z # User@Host: root[root] @ localhost [] Id: 150 # Query_time: 0.002549 Lock_time: 0.000144 Rows_sent: 1 Rows_examined: 4079 SET timestamp=1566292669; select * from city where Name = '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 Name='Salala'G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: city partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4188 filtered: 10.00 Extra: Using where 1 row in set, 1 warning (0.00 sec)
可以看出来,该sql语句是进行了全盘扫描。我们可以使用索引对其进行简单的优化一下。
2、创建索引
mysql> create index idx_cityName on city(`Name`); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
3、使用explain分析一波
mysql> explain select * from city where Name='Salala'G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: city partitions: NULL type: ref possible_keys: idx_cityName key: idx_cityName key_len: 35 ref: const rows: 1 filtered: 100.00 Extra: NULL 1 row in set, 1 warning (0.01 sec)
通过创建索引,我们发现此时只扫描了一行,并且是使用的索引扫描,因此大大提高了一个mysql查询的效率。
mysql慢查询使用总结
在平常的开发中,慢查询作为MySQL优化的一个途径,是非常有用的。它会记录下我们一些查询时间长的sql语句,对其语句我们进行分析,从而达到sql查询语句的最优化。但是慢日志查询开启之后,针对sql查询会通过磁盘I/O将相关的记录写入到磁盘文件中,增加了一个磁盘的I/O读写。因此,我们该功能用在开发、测试环境上,而不用在生产环境中去。
慢日志查询工具
由于慢日志查询文件越到后期,内容越多。我们对其分析的压力越大,因此我们需要借助某些工具实现快速分析。这些工具还没完全使用熟悉,后期单独写一篇文章介绍该类型的工具,这里只是罗列一下工具名称。
1.mysqldumpslow
2.pt-query-digest
3.mysqltop(天兔Lepus)
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整