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非空约束(not null)案例讲解
Aug 23 MySQL
SQL实战演练之网上商城数据库商品类别数据操作
Oct 24 MySQL
浅谈mysql哪些情况会导致索引失效
Nov 20 MySQL
mysql5.6主从搭建以及不同步问题详解
Dec 04 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 MySQL
MySQL的InnoDB存储引擎的数据页结构详解
Mar 03 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 MySQL
MySQL 数据库 增删查改、克隆、外键 等操作
May 11 MySQL
MySQL数据库查询之多表查询总结
Aug 05 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
Sep 23 MySQL
MySQL日期时间函数知识汇总
MySQL优化常用的19种有效方法(推荐!)
MySQL多表查询机制
MySQL高级进阶sql语句总结大全
Mar 16 #MySQL
一条慢SQL语句引发的改造之路
MySQL中一条update语句是如何执行的
关于k8s环境部署mysql主从的问题
Mar 13 #MySQL
You might like
重置版游戏视频
2020/04/09 魔兽争霸
PHP 的 __FILE__ 常量
2007/01/15 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
php 正则表达式小结
2009/08/31 PHP
php实现word转html的方法
2016/01/22 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
基于jquery的Repeater实现代码
2010/07/17 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
python flask 多对多表查询功能
2017/06/25 Python
基于Python的关键字监控及告警
2017/07/06 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
查看python下OpenCV版本的方法
2018/08/03 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
如何清空Session
2015/02/23 面试题
JAVA中运算符的分类及举例
2015/09/12 面试题
幼儿评语大全
2014/04/30 职场文书
护理学专业求职信
2014/06/29 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
2015年化验员工作总结
2015/04/10 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
Python实现生活常识解答机器人
2021/06/28 Python