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 27 MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 MySQL
MySQL 使用事件(Events)完成计划任务
May 24 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
MySQL通过binlog恢复数据
May 27 MySQL
Navicat连接MySQL错误描述分析
Jun 02 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
MySQL创建表操作命令分享
Mar 25 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
MySQL 数据库 增删查改、克隆、外键 等操作
May 11 MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
用PHP连接Oracle数据库
2006/10/09 PHP
聊天室php&mysql(二)
2006/10/09 PHP
什么是MVC,好东西啊
2007/05/03 PHP
php 删除一个数组中的某个值.兼容多维数组!
2012/02/18 PHP
初识PHP
2014/09/28 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
javascript编程起步(第四课)
2007/01/10 Javascript
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
Python使用分布式锁的代码演示示例
2018/07/30 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
python实现画循环圆
2019/11/23 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
高中微机老师自我鉴定
2014/02/16 职场文书
消防安全员岗位职责
2014/03/10 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
中学生检讨书1000字
2014/10/28 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
修辞手法有哪些?
2019/08/29 职场文书