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 05 MySQL
Mysql文件存储图文详解
Jun 01 MySQL
mysql 如何获取两个集合的交集/差集/并集
Jun 08 MySQL
mysql连接查询中and与where的区别浅析
Jul 01 MySQL
MySQL系列之九 mysql查询缓存及索引
Jul 02 MySQL
MySQL里面的子查询的基本使用
Aug 02 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
关于k8s环境部署mysql主从的问题
Mar 13 MySQL
sql查询语句之平均分、最高最低分及排序语句
May 30 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原理之变量(Variables inside PHP)
2013/08/09 PHP
smarty中post用法实例
2014/11/28 PHP
php实现无限级分类
2014/12/24 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
jQuery checkbox全选/取消全选实现代码
2009/11/14 Javascript
js获取当前select 元素值的代码
2010/04/19 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
Django密码系统实现过程详解
2019/07/19 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
Delphi工程师笔试题
2013/09/21 面试题
英文版餐饮运营管理求职信
2013/11/06 职场文书
网页美工求职信范文
2014/04/17 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL