MySQL-获取有性能问题SQL的方法_慢查询 & 实时获取

文章目录

  • 官方文档
  • 使用慢查询获取慢SQL
    • 慢查询的相关参数
      • slow_query_log 是否开启了慢查询
        • 开启慢查询
      • slow_query_log_file 指定慢查询日志的存储路径及文件
      • long_query_time 指定记录慢查询日志SQL执行时间的阈值
      • log_queries_not_using_indexes 是否记录未使用索引的SQL
    • 慢查询日志的分析工具
      • mysqldumpslow 官方
      • pt-query-digest
  • 实时获取
    • 查询 information_schema.processlist

在这里插入图片描述


官方文档

https://dev.mysql.com/doc/

在这里插入图片描述

如果英文不好的话,可以参考 searchdoc 翻译的中文版本

http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html
在这里插入图片描述


使用慢查询获取慢SQL

慢查询的相关参数

slow_query_log 是否开启了慢查询

默认关闭

mysql> show variables like  'slow_query_log';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | OFF   |
+----------------+-------+
1 row in set (0.00 sec)

mysql> 

因为记录慢查询比较占用磁盘空间,可以通过脚本关闭慢查询,比如一个小时以后关闭慢查询等等。

开启慢查询

开启的话,可以通过 set global 来动态修改。

mysql> set global slow_query_log=on;   # 开启慢查询 
Query OK, 0 rows affected (0.04 sec)

mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | ON    |
+----------------+-------+
1 row in set (0.01 sec)

mysql> 


slow_query_log_file 指定慢查询日志的存储路径及文件

默认存储在MySQL的数据目录中,建议日志文件和数据文件分开存储。

mysql> show variables like 'slow_query_log_file';
+---------------------+---------------------------------+
| Variable_name       | Value                           |
+---------------------+---------------------------------+
| slow_query_log_file | /var/lib/mysql/artisan-slow.log |
+---------------------+---------------------------------+
1 row in set (0.01 sec)


long_query_time 指定记录慢查询日志SQL执行时间的阈值

单位为秒 。 默认10秒。

mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.02 sec)



log_queries_not_using_indexes 是否记录未使用索引的SQL

mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF   |
+-------------------------------+-------+
1 row in set (0.00 sec)

mysql> 


慢查询日志的分析工具

慢日志涨这个样子:

MySQL-获取有性能问题SQL的方法_慢查询 & 实时获取_第1张图片

如何分析呢? 因为慢查询日志比较大,靠肉眼很难分析,所以需要依赖第三方工具

mysqldumpslow 官方

mysqldumpslow可以汇总除查询条件外其他完全相同的SQL,并将分析结果按照参数中所指定的顺序输出。

用法 :

mysqldumpslow -s r -t 10 slow-mysql.log

参数说明:

  • -s order (c , t , l ,r , at ,al ,ar) 指定按照那种排序方式输出结果

    c: 总次数
    t: 总时间
    l: 锁的时间
    r:种数据行

    at 、 al、ar : t l r 平均数, 比如 at = 总时间/总次数

  • -t top 指定取前几条作为结果输出。


pt-query-digest

第三方的工具,

用法如下:

pt-query-digest \
--explain h=ip.1,u=用户,p=密码\
slow-mysql.log  


这个工具生成的慢查询分析日志 更详细。 建议用这个

主从架构下, 建议在从节点执行 。


实时获取

查询 information_schema.processlist

SELECT
	id,
	`USER`,
	`HOST`,
	db,
	COMMAND,
	TIME,
	state,
	INFO
FROM
	information_schema.`PROCESSLIST` a
WHERE
	a.TIME > 60

你可能感兴趣的:(【MySQL基础篇】)