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 22 MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
Jul 02 MySQL
MySQL 四种连接和多表查询详解
Jul 16 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
MySQL中IO问题的深入分析与优化
Apr 02 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
Apr 19 MySQL
mysql 体系结构和存储引擎介绍
May 06 MySQL
MYSQL事务的隔离级别与MVCC
May 25 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
MySQL数据库实验之 触发器和存储过程
Jun 21 MySQL
MySQL池化框架学习接池自定义
Jul 23 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 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
php创建session的方法实例详解
2015/01/27 PHP
php计算整个目录大小的方法
2015/06/19 PHP
javascript 短路法代码精简
2009/08/20 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
Python 变量的创建过程详解
2019/09/02 Python
python 实现多维数组转向量
2019/11/30 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
旅游管理专业个人求职信范文
2013/12/24 职场文书
挖掘机司机岗位职责
2014/02/12 职场文书
海飞丝广告词
2014/03/20 职场文书
《锄禾》教学反思
2014/04/08 职场文书
对祖国的寄语大全
2014/04/11 职场文书
入股协议书范本
2014/04/14 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
公司外出活动方案
2014/08/14 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
高中升旗仪式演讲稿
2014/09/09 职场文书
优秀教师推荐材料
2014/12/16 职场文书
总账会计岗位职责
2015/04/02 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
小学二年级语文教学反思
2016/03/03 职场文书