mysql 慢查询_MySQL慢查询日志

慢查询日志是MySQL日志功能的一种,记录查询时间大于默认或设置值的SQL语句,也就是记录运行时间超过long_query_time值的SQL(支持写入文件中)。

MySQL数据库的long_query_time默认值的10,即10秒。这个值可由我们自己设置。

默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询会或多或少带来一定的性能影响。

查看是否开启

show variables like '%slow_query_log%';
27e068f5c8eabf280e8be40e4ef88543.png

slow_query_log值是OFF,即关闭,也是默认值。slow_query_log_file:日志记录所在路径及文件名。

开启命令:

set global slow_query_log=1;
512245170a33b3639cb7b7e186f874ae.png

slow_query_log值等于ON,代表已经开启。不过使用此命令开启,重启之后会失效。

这个东西不应该长久生效,若一定要长期开启,可以修改my.cnf配置文件。在[mysqld]下增加参数:slow_query_log和slow_query__log_file,如:

slow_query_log=1 slow_query_log_file=/var/lib/mysql/VM_0_9_centos-slow.log

slow_query_log_file这个值可以缺省,会给默认值:hostname-slow.log,以上就是我本机缺省的值。增加修改参数后重启数据库服务器。

long_query_time

运行时间超过long_query_time值的SQL将会被记录到慢查询日志中,查看long_query_time值:

show variables like '%long_query_time%';
f0e967b6b5018018ad2ccbdde4560867.png

默认值是10秒,要大于10才会被记录,所以等于也不会。

这个值可用命令修改,也可以在my.cnf中修改。假设超过3秒就认为是慢查询,通过命令可以这样修改:

set global long_query_time = 3;
2aaf46fc318cffc2fe8658d915b01842.png

修改之后马上查看会发现值还没有改变,此时需要我们重新连接或者打开新的会话。下图就是在新开会话中查看的:

8b7a3eef2858bd96acb63bddc91b84f0.png

是3秒,没有问题。

现在使用sleep函数模拟一个慢查询,看看效果:

 select sleep(4);
e935d1af453da4e9a90b1478553a9183.png

时间是4秒,查看一下日志文件是否有记录。

可以使用cat命令打印出日志文件内容,也可vi(vim)命令

cat /var/lib/mysql/VM_0_9_centos-slow.log
3768b4377abdf4a407ac740ed3cb9c29.png

最后一行即刚才模拟的SQL,生产环境我们可以把此SQL拿到,然后结合explain做进一步的分析。

mysqldumpslow

mysqldumpslow是MySQL提供的一个日志分析工具,方便我们在分析日志时候减少一些工作量。而且在生产环境中,我们可以利用工具,根据某些条件得到想要的慢SQL。

mysqldumpslow帮助信息:

mysqldumpslow --help
a780412fc06313251650409e35ae9469.png

下面是其中一些选项的意义:

s:是表示按照何种方式排序;c:访问次数l:锁定时间r:返回记录t:查询时间al:平均锁定时间ar:平均返回记录数at:平均查询时间t:即为返回前面多少条的数据;g:后边搭配一个正则匹配模式,大小写不敏感。

我们可以用以上参数进行拼装,然后得到我们想要的慢SQL。如得到访问次数最多的10条SQL:

mysqldumpslow -s c -t 10 /var/lib/mysql/VM_0_9_centos-slow.log

结果形式如下

1bb8388ccaf5a0334f85053f8f1e5c9a.png

这里简单地举一个例子好了,其余的自己可以在工作中多去运用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 慢查询日志可以记录执行时间超过指定阈值的 SQL 查询语句,用于帮助 DBA 或开发者监控和优化 SQL 查询性能。 以下是 MySQL 慢查询日志分析的一般步骤: 1. 开启 MySQL 慢查询日志。在 MySQL 配置文件中设置 `slow_query_log` 参数为 `ON`,并指定 `slow_query_log_file` 参数为日志文件路径。 2. 查看慢查询日志。可以使用 `mysqldumpslow` 工具或者其他第三方工具来查看慢查询日志,例如: ``` mysqldumpslow -s t /path/to/slow_query_log_file ``` 上面的命令会按照时间排序并显示执行时间最长的 SQL 查询语句。 3. 分析慢查询语句。对于执行时间较长的 SQL 查询语句,可以进行如下分析: - 检查 SQL 查询语句是否存在索引。可以使用 `EXPLAIN` 命令或者其他第三方工具来查看 SQL 查询语句的执行计划,判断是否存在全表扫描或者索引失效等问题。 - 检查 SQL 查询语句的优化方式。可以考虑对 SQL 查询语句进行重构,使用更优的语法或者查询方式,例如使用 JOIN、子查询等方式来替代多次查询。 - 检查 MySQL 数据库的配置参数。可以根据查询语句的特点来调整 MySQL 数据库的配置参数,例如 `innodb_buffer_pool_size`、`max_connections`、`query_cache_size` 等参数。 4. 优化慢查询语句。根据分析结果,对 SQL 查询语句、MySQL 数据库配置参数等进行优化,提高查询性能。 总之,MySQL 慢查询日志分析需要结合实际情况和经验进行,需要不断地监控和优化,以提高 MySQL 数据库的性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值