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
MySQL时间盲注的五种延时方法实现
May 18 MySQL
mysql left join快速转inner join的过程
Jun 30 MySQL
mysql定时自动备份数据库的方法步骤
Jul 07 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
简单聊一聊SQL注入及防止SQL注入
Mar 23 MySQL
一文简单了解MySQL前缀索引
Apr 03 MySQL
解决MySQL Varchar 类型尾部空格的问题
Apr 06 MySQL
MySQL时区造成时差问题
Apr 13 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 MySQL
MySQL自定义函数及触发器
Aug 05 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与浏览器缓存的分析
2013/06/03 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
js 模拟气泡屏保效果代码
2010/07/10 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
Python中的两个内置模块介绍
2015/04/05 Python
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
python中range()与xrange()用法分析
2016/09/21 Python
python中正则的使用指南
2016/12/04 Python
详解Python中类的定义与使用
2017/04/11 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
详解Python文件修改的两种方式
2019/08/22 Python
超级实用的8个Python列表技巧
2020/08/24 Python
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
PHP面试题集
2016/12/18 面试题
一套带答案的C++笔试题
2014/01/10 面试题
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
岗位职责的定义
2013/11/10 职场文书
班组长岗位职责
2014/03/03 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
文明单位创建材料
2014/12/24 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python