MySQL慢查询优化解决问题


Posted in MySQL onMarch 17, 2022

1.  MySQL慢查询介绍

  MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表

慢查询日志相关参数:

MySQL 慢查询的相关参数解释:

  • slow_query_log    :是否开启慢查询日志,1表示开启,0表示关闭。
  • log-slow-queries  :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
  • slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
  • long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。
  • log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
  • log_output:日志存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件。

2.发现问题(主动/被动)

问题点:数据库查询过程中速度过慢的SQL语句

主动:数据库默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的

mysql> show variables  like '%slow_query_log%';
+---------------------+-----------------------------------------------+
| Variable_name       | Value                                         |
+---------------------+-----------------------------------------------+
| slow_query_log      | OFF                                           |
| slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |
+---------------------+-----------------------------------------------+
2 rows in set (0.00 sec)
 
mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.09 sec)
 
mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------------------------+
| Variable_name       | Value                                         |
+---------------------+-----------------------------------------------+
| slow_query_log      | ON                                            |
| slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |
+---------------------+-----------------------------------------------+
2 rows in set (0.00 sec)

被动:用户在使用程序时候告知页面反应慢

3.找到原因-对症下药

原因点:没有加索引、索引失效、SQL极度复杂、高并发

1.表结构设计时没有索引导致

2.SQL语句导致索引失效

索引失效7字口诀:

  • 模:模糊查询LIKE以%开头
  • 型:数据类型错误
  • 数:对索引字段使用内部函数
  • 空:索引列是NULL
  • 运:索引列进行四则运算
  • 最:复合索引不按索引列最左开始查找
  • 快:全表查找预计比索引更快

3.SQL极度复杂10张以上表联合查询

  • 优化表结构和程序

4.高并发时段导致等待

  • 在程序和数据库之间加入缓存

Hole yor life get everything if you never give up.

到此这篇关于MySQL慢查询优化解决问题的文章就介绍到这了,更多相关MySQL慢查询优化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL查询学习之基础查询操作
May 08 MySQL
MySQL 逻辑备份与恢复测试的相关总结
May 14 MySQL
新手入门Mysql--sql执行过程
Jun 20 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL非空约束(not null)案例讲解
Aug 23 MySQL
mysql中整数数据类型tinyint详解
Dec 06 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
解决MySQL报“too many connections“错误
Apr 19 MySQL
Windows 64位 安装 mysql 8.0.28 图文教程
Apr 19 MySQL
关于mysql中string和number的转换问题
Jun 14 MySQL
mysql序号rownum行号实现方式
Dec 24 MySQL
MySQL日期时间函数知识汇总
MySQL优化常用的19种有效方法(推荐!)
MySQL多表查询机制
MySQL高级进阶sql语句总结大全
Mar 16 #MySQL
一条慢SQL语句引发的改造之路
MySQL中一条update语句是如何执行的
关于k8s环境部署mysql主从的问题
Mar 13 #MySQL
You might like
10个实用的PHP代码片段
2011/09/02 PHP
jquery 事件对象属性小结
2010/04/27 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
微信网页授权并获取用户信息的方法
2018/07/30 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
小程序实现多列选择器
2019/02/15 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
银行员工职业规划范文
2014/01/21 职场文书
关于旷工的检讨书
2014/02/02 职场文书
安卓程序员求职信
2014/02/28 职场文书
认错检讨书
2014/10/02 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
2015年校医个人工作总结
2015/07/24 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
MySQL读取JSON转换的方式
2022/03/18 MySQL