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优化
Apr 06 MySQL
MySql学习笔记之事务隔离级别详解
May 12 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
MySQL删除和插入数据很慢的问题解决
Jun 03 MySQL
解析MySQL binlog
Jun 11 MySQL
Mysql binlog日志文件过大的解决
Oct 05 MySQL
MYSQL 表的全面总结
Nov 11 MySQL
MySQL创建定时任务
Jan 22 MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 MySQL
MySQL聚簇索引和非聚簇索引的区别详情
Jun 14 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 23 MySQL
MySQL日期时间函数知识汇总
MySQL优化常用的19种有效方法(推荐!)
MySQL多表查询机制
MySQL高级进阶sql语句总结大全
Mar 16 #MySQL
一条慢SQL语句引发的改造之路
MySQL中一条update语句是如何执行的
关于k8s环境部署mysql主从的问题
Mar 13 #MySQL
You might like
PHP中实现进程间通讯
2006/10/09 PHP
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
php设置编码格式的方法
2013/03/05 PHP
php实现的双向队列类实例
2014/09/24 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
vue组件的写法汇总
2018/04/12 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
Prototype如何更新局部页面
2013/03/03 面试题
学生发电厂实习自我鉴定
2013/09/22 职场文书
新闻学专业个人求职信写作
2014/02/04 职场文书
挂职自我鉴定
2014/02/26 职场文书
道路交通安全实施方案
2014/03/12 职场文书
师范类求职信
2014/06/21 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记