MySQL优化之慢日志查询


Posted in MySQL onJune 10, 2022

一、慢查询日志概念

对于SQL和索引的优化问题,我们会使用explain去分析SQL语句。但是真正的企业级项目有成千上万条SQL,我们不可能从头开始一条一条explain去分析。我们从什么地方可以获取那些运行时间长,耗性能的SQL??

我们可以打开慢查询日志

根据具体的业务和并发量来预估一个时间上限(20ms、100ms),设置好后开启业务,压测后打开慢查询日志,就会看到超过执行时间的SQL,然后使用explain分析这些耗时的SQL语句

步骤如下:

  1. 打开慢查询日志开关slow_query_log
  2. 设置合理的、业务可以接受的慢查询时间上限
  3. 压测执行各种业务
  4. 查看慢查询日志,找出所有执行耗时的SQL语句
  5. 用explain分析这些耗时的SQL语句,从而针对性优化

MySQL可以设置慢查询日志,当SQL执行的时间超过我们设定的时间,那么这些SQL就会被记录在慢查询日志当中,然后我们通过查看日志,用explain分析这些SQL的执行计划,来判定为什么效率低下,是没有使用到索引?还是索引本身创建的有问题?或者是索引使用到了,但是由于表的数据量太大,花费的时间就是很长,那么此时我们可以把表分成多个小表等。

慢查询日志相关的参数如下所示:
(MySQL定义的很多的全局的开关,都是在全局变量中存储,可以用show/set variables查看或者设置全局变量的值)

MySQL优化之慢日志查询
慢查询日志开关默认是关闭的
慢查询日志的路径:默认在/var/lib/mysql/

慢查询日志记录了包含所有执行时间超过参数 long_query_time(单位:秒)所设置值的 SQL语句的日志,在MySQL上用命令可以查看,如下:

MySQL优化之慢日志查询
这个值是可以修改的:

MySQL优化之慢日志查询

二、慢查询日志实践

1. 打开慢查询日志开关slow_query_log

MySQL优化之慢日志查询

在打开慢查询日志开关的时候,报错表示slow_query_log是一个global的变量(也有只影响当前session的变量,如:long_query_time 、profiling),修改后会影响所有的session,即影响所有正在访问当前MySQL server的客户端。
MySQL优化之慢日志查询
打开慢查询日志开关成功!

2. 设置合理的、业务可以接受的慢查询时间上限long_query_time

MySQL优化之慢日志查询
查看另一个session

MySQL优化之慢日志查询
发现还是默认的10s,故long_query_time只影响当前session

3. 压测执行各种业务

MySQL优化之慢日志查询
已经超过我们设置的long_query_time=0.1s

4. 查看慢查询日志

路径:/var/lib/mysql/
MySQL优化之慢日志查询
MySQL优化之慢日志查询

5. 用explain分析这些耗时的SQL语句,从而针对性优化

MySQL优化之慢日志查询
做了整表的搜索,把主键索引树整个扫了一遍。

我们应该给password添加索引,然后记得password是字符串格式,因为如果涉及类型转换是用不了索引的

三、show profiles查看sql具体的运行时间

MySQL一般只显示小数点后两位的时间
MySQL优化之慢日志查询
打开profiling开关,显示更详细的时间

MySQL优化之慢日志查询
没有报错,说明profiling变量只影响当前session

MySQL优化之慢日志查询


Tags in this post...

MySQL 相关文章推荐
MySQL数据迁移相关总结
Apr 29 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
mysql外连接与内连接查询的不同之处
Jun 03 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
Mysql超详细讲解死锁问题的理解
Apr 01 MySQL
为什么MySQL不建议使用SELECT *
Apr 03 MySQL
MySQL 逻辑备份 into outfile
May 15 MySQL
MySQL GTID复制的具体使用
May 20 MySQL
SQLServer常见数学函数梳理总结
Aug 05 MySQL
MySQL深分页问题解决思路
Dec 24 MySQL
MySql中的json_extract函数处理json字段详情
Jun 05 #MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 #MySQL
MySQL中JOIN连接的基本用法实例
Jun 05 #MySQL
MySQL中order by的执行过程
MySQL 语句执行顺序举例解析
Jun 05 #MySQL
MySql数据库触发器使用教程
Jun 01 #MySQL
MySQL选择合适的备份策略和备份工具
You might like
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
PHP中16个高危函数整理
2019/09/19 PHP
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
JS跨域问题详解
2014/11/25 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
Angular工具方法学习
2016/12/26 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
python实现udp数据报传输的方法
2014/09/26 Python
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
会计系毕业个人自荐信格式
2013/09/23 职场文书
优秀护士演讲稿
2014/04/30 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
2014年残联工作总结
2014/11/21 职场文书
中学生运动会广播稿
2015/08/19 职场文书
如何书写授权委托书?
2019/06/25 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
python异常中else的实例用法
2021/06/15 Python
Ajax实现异步加载数据
2021/11/17 Javascript
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python