mysql慢处理

检查数据库连接数情况,执行:

mysql> show status like '%connect%';
mysql> show variables like '%connect%';
mysql> show global status like '%abort%';

由上图可知,当前连接数并不高,但无效连接Aborted connects达到553530,上图的最大错误连接是修改后的,原值为3000;

检查sleep状态线程

在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,可以进行适当的调整小些。

show processlist

在这里插入图片描述

开启慢日志记录

[mysqld]
slow_query_log = ON # 开启慢日志记录
slow_query_log_file = /var/lib/mysql/mariadb_slow.log # 慢日志path
long_query_time = 3 # 慢日志时间

查看慢查询的SQL语句

mysql> SHOW FULL PROCESSLIST;

查看慢查询的原因

mysql> EXPLAIN <slow_query>;

详细的sql情况(方法二的详细版)

mysqldumpslow -a -s t -t 10 /var/lib/mysql/7b7b345abeb6-slow.log

1)mysqldumpslow还有一些其他参数,可以通过mysqldumpslow --help查看
2)mysqldumpslow能将相同的慢SQL归类,并统计出相同的SQL执行的次数,每次执行耗时多久、总耗时,每次返回的行数、总行数,以及客户端连接信息等。

mysqldumpslow语法说明:

-s ,按照什么方式起来排序。默认at,也就是按照平均查询时间来排序。都是按照倒序排列。
al: average lock time 平均锁定时间
ar: average rows sent 平均返回行数
at: average query time 平均查询时间
c: count 总执行次数
l: lock time 总锁定时间
r: rows sent 总返回行数
t: query time 总查询时间
-t ,show the top n queries,显示前多少名的记录
-a ,默认不开启这个选项。mysqldumpslow将相似的SQL的值(字符串或者数字)替换为N,开启该选项,则显示真实值。不开启该选项,有点类似于Oracle的绑定变量的记录。
-g ,类似于grep命令,过滤出需要的信息。如,只查询A表的慢查询记录。
-l ,总时间中包含锁定时间

原文链接:https://blog.csdn.net/java_zhulinghai/article/details/126541978