MySQL优化教程之慢查询日志实践
作者:BugMaker-shen 发布时间:2024-01-24 11:22:57
一、慢查询日志概念
对于SQL和索引的优化问题,我们会使用explain去分析SQL语句。但是真正的企业级项目有成千上万条SQL,我们不可能从头开始一条一条explain去分析。我们从什么地方可以获取那些运行时间长,耗性能的SQL??
我们可以打开慢查询日志:
根据具体的业务和并发量来预估一个时间上限(20ms、100ms),设置好后开启业务,压测后打开慢查询日志,就会看到超过执行时间的SQL,然后使用explain分析这些耗时的SQL语句
步骤如下:
打开慢查询日志开关
slow_query_log
设置合理的、业务可以接受的慢查询时间上限
压测执行各种业务
查看慢查询日志,找出所有执行耗时的SQL语句
用explain分析这些耗时的SQL语句,从而针对性优化
MySQL可以设置慢查询日志,当SQL执行的时间超过我们设定的时间,那么这些SQL就会被记录在慢查询日志当中,然后我们通过查看日志,用explain分析这些SQL的执行计划,来判定为什么效率低下,是没有使用到索引?还是索引本身创建的有问题?或者是索引使用到了,但是由于表的数据量太大,花费的时间就是很长,那么此时我们可以把表分成多个小表等。
慢查询日志相关的参数如下所示:
(MySQL定义的很多的全局的开关,都是在全局变量中存储,可以用show/set variables
查看或者设置全局变量的值)
慢查询日志开关默认是关闭的
慢查询日志的路径:默认在/var/lib/mysql/
下
慢查询日志记录了包含所有执行时间超过参数 long_query_time(单位:秒)所设置值的 SQL语句的日志,在MySQL上用命令可以查看,如下:
这个值是可以修改的:
二、慢查询日志实践
1. 打开慢查询日志开关slow_query_log
在打开慢查询日志开关的时候,报错表示slow_query_log是一个global的变量(也有只影响当前session的变量,如:long_query_time 、profiling),修改后会影响所有的session,即影响所有正在访问当前MySQL server的客户端。
打开慢查询日志开关成功!
2. 设置合理的、业务可以接受的慢查询时间上限long_query_time
查看另一个session
发现还是默认的10s,故long_query_time只影响当前session
3. 压测执行各种业务
已经超过我们设置的long_query_time=0.1s
4. 查看慢查询日志
路径:/var/lib/mysql/
5. 用explain分析这些耗时的SQL语句,从而针对性优化
做了整表的搜索,把主键索引树整个扫了一遍。
我们应该给password添加索引,然后记得password是字符串格式,因为如果涉及类型转换是用不了索引的
三、show profiles查看sql具体的运行时间
MySQL一般只显示小数点后两位的时间
打开profiling开关,显示更详细的时间
没有报错,说明profiling变量只影响当前session
总结
来源:https://blog.csdn.net/qq_42500831/article/details/123462261


猜你喜欢
- 本例已经实现的数据库password,数据库的表以及表结构如下:表中已经插入的信息:实现思路无非是用户完成账户密码输入并点击登录
- 函数声明function foo() {}函数 foo 将会在整个程序执行前被 hoist (提升),因此它在定义 foo 函数的整个 sc
- 前言废话滑块验证码破解是一直都想搞的项目,毕竟多数网站都会采用滑块验证码,于是最近在修改论文的闲暇之余把这事儿给解决了。要搞现在的滑块验证码
- 这篇文章主要介绍了python主线程与子线程的结束顺序实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 由于这个游标 执行一下就相当于SELECT一下 其效率不敢恭维也没做深入研究。 table1结构如下 id &
- 操作步骤1.下载BeautifulReport文件,本例文件下载地址 最新文件下载地址2.复制文件BeautifulReport,至pyth
- ...mapstate和...mapgetters的区别…mapstate当一个组件需要获取多个状态时候,将这些状态都
- 一 例子现在,讲述一个真实的故事!故事一定是伴随着赵忠祥老师的声音开始的,雨季就要来临了,又到了动物们 * 的季节了...还记得,之前发生的作
- 本文实例讲述了MySql采用GROUP_CONCAT合并多条数据显示的方法,分享给大家供大家参考。具体实现方法如下:假设有这样一个需求:1:
- 列表是什么列表是元素的集合,存储在一个变量中。列表中存储的元素类型没有限制,根据需要动态分配和回收内存列表中的每个元素都会分配一个数字用来表
- 这里需要用到python处理excel很经典的库openpyxl,安装也特别简单。window直接pip install就好了代码在这里~w
- 使用cv2对视频进行切割import cv2def clip_video(source_video, target_video, start
- 最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员。四年半来她一直在从事 JavaScript 相关的工作,她自认为 Java
- 阅读目录前言加密算法分类Python加密库DES加密AES加密RSA加密前言据记载,公元前400年,古希腊人发明了置换密码。1881年世界上
- 要自己写一个存储系统,可以依照以下步骤:1.写一个继承自django.core.files.storage.Storage的子类。from
- torch.nn.Modules 相当于是对网络某种层的封装,包括网络结构以及网络参数和一些操作torch.nn.Module 是所有神经网
- 发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性。很多人在群里问,这个下拉框定位不到、那个弹出框定位不到…各种定位不到,
- 前文介绍了Oracle 中实现数据透视表的几种方法,今天我们来看看在 MySQL/MariaDB 中如何实现相同的功能。本文使用的示例数据可
- display_errors 错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项。错误回显可以暴露出非常多的敏感信息,
- PyQt中的线程类 QtCore.QThread ,使用时继承QThread类启动界面的线程暂称为UI线程。界面执行命令时都在自己的UI线程