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 InnoDB存储引擎的内存管理
Apr 08 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
MySQL的安装与配置详细教程
Jun 26 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
SQL之各种join小结详细讲解
Aug 04 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
MySQL数据库10秒内插入百万条数据的实现
Nov 01 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
Mysql InnoDB 的内存逻辑架构
May 06 MySQL
面试官问我Mysql的存储引擎了解多少
Aug 05 MySQL
MySql统计函数COUNT的具体使用详解
Aug 14 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 MemCached 高级缓存应用代码
2010/08/05 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
解析argc argv在php中的应用
2013/06/24 PHP
php实现计数器方法小结
2015/01/05 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
PHP反射API示例分享
2016/10/08 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
使用node.js 制作网站前台后台
2014/11/13 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
详解离线安装npm包的几种方法
2018/11/25 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
Python 随机生成中文验证码的实例代码
2013/03/20 Python
Python元字符的用法实例解析
2018/01/17 Python
python 构造三维全零数组的方法
2018/11/12 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
对于Python深浅拷贝的理解
2019/07/29 Python
python常用数据重复项处理方法
2019/11/22 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
高中军训感想800字
2014/02/23 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
新教师教学工作总结
2015/08/14 职场文书
JavaScript组合继承详解
2021/11/07 Javascript