MySQL慢查询优化解决问题

作者:@sonny-zhang 时间:2024-01-12 19:59:41 

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.

来源:https://www.cnblogs.com/1fengchen1/p/15909410.html

标签:MySQL慢查询,优化
0
投稿

猜你喜欢

  • ajax 同步请求和异步请求的差异分析

    2011-07-05 12:36:04
  • 教你四种方法用来查看mysql版本

    2009-06-28 11:13:00
  • 理解HTTP消息头

    2008-12-10 14:06:00
  • Python面向对象编程之类的封装

    2022-10-20 05:29:49
  • 解决vue热替换失效的根本原因

    2024-04-30 10:25:57
  • python列表的切片与复制示例分析

    2023-07-15 02:12:34
  • 由Python运算π的值深入Python中科学计算的实现

    2021-10-21 03:48:06
  • python获取指定字符串中重复模式最高的字符串方法

    2021-03-25 14:59:25
  • MySQL load语句详细介绍

    2024-01-27 01:31:05
  • pyqt5打包成exe可执行文件的方法

    2022-02-09 11:25:57
  • 浅谈pytorch和Numpy的区别以及相互转换方法

    2022-02-12 03:51:47
  • Python数学建模StatsModels统计回归可视化示例详解

    2023-10-09 02:16:54
  • asp 简单分页代码

    2011-03-11 10:53:00
  • tensorboard 可以显示graph,却不能显示scalar的解决方式

    2022-07-21 08:55:46
  • 用Python实现给Word文档盖章

    2021-07-08 21:18:00
  • javascript for-in有序遍历json数据并探讨各个浏览器差异

    2024-05-25 15:18:17
  • 详解python的循环

    2022-12-29 04:22:52
  • PHP的PDO连接讲解

    2023-06-12 20:40:33
  • Asp.net中使用Sqlite数据库的方法

    2024-01-18 03:14:45
  • 字符集和字符编码(Charset & Encoding)

    2023-08-24 16:37:44
  • asp之家 网络编程 m.aspxhome.com