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 13 MySQL
MySQL官方导出工具mysqlpump的使用
May 21 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
MySQL中distinct和count(*)的使用方法比较
May 26 MySQL
MySQL单表千万级数据处理的思路分享
Jun 05 MySQL
Mysql排序的特性详情
Nov 01 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
如何创建一个创建MySQL数据库中的datetime类型
Mar 21 MySQL
mysql数据插入覆盖和时间戳的问题及解决
Mar 25 MySQL
一文了解MYSQL三大范式和表约束
Apr 03 MySQL
Mysql InnoDB 的内存逻辑架构
May 06 MySQL
MySQL日期时间函数知识汇总
MySQL优化常用的19种有效方法(推荐!)
MySQL多表查询机制
MySQL高级进阶sql语句总结大全
Mar 16 #MySQL
一条慢SQL语句引发的改造之路
MySQL中一条update语句是如何执行的
关于k8s环境部署mysql主从的问题
Mar 13 #MySQL
You might like
php与paypal整合方法
2010/11/28 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
php格式化时间戳
2016/12/17 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
详解python3百度指数抓取实例
2016/12/12 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
2019/08/01 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
网游商务专员求职信
2013/10/15 职场文书
应届毕业生求职信
2013/11/30 职场文书
劳模先进事迹材料
2014/12/24 职场文书
文体活动总结
2015/02/04 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书