您现在的位置是:首页 >学无止境 >MySQL 数据库慢查询网站首页学无止境

MySQL 数据库慢查询

握日摘星 2024-09-22 00:01:04
简介MySQL 数据库慢查询

MySQL 数据库慢查询主要用于跟踪异常的 SQL 语句,可以分析出当前程序里哪些SQL 语句比较耗费资源,慢查询日志则用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过 long_qu ery_time 值的 QL 语句,会被记录到慢查询日志中。
MySQL 数据库默认没有开启慢查询日志功能,需手动在配置文件或者 MySQL 令行中开启,慢查询日志默认写入磁盘中的文件,也可以将慢查询日志写入到数据库表中。
查看数据库是否开启慢查询,命令如下

MariaDB [(none)]> show variables like "%slow%";
+---------------------+--------------------------------------------------------------------------------------------------------------+
| Variable_name       | Value                                                                                                        |
+---------------------+--------------------------------------------------------------------------------------------------------------+
| log_slow_filter     | admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk |
| log_slow_queries    | OFF                                                                                                          |
| log_slow_rate_limit | 1                                                                                                            |
| log_slow_verbosity  |                                                                                                              |
| slow_launch_time    | 2                                                                                                            |
| slow_query_log      | OFF                                                                                                          |
| slow_query_log_file | yun1-slow.log                                                                                                |
+---------------------+--------------------------------------------------------------------------------------------------------------+
7 rows in set (0.00 sec)

MariaDB [(none)]> show variables like "%long_query%";
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

MySQL 慢查询参数详解如下:
log_ slow queries 关闭慢查询日志功能。
a long_query_time :慢查询超时时间,默认为 lOs,MySQL 5. 以上可 以设置微秒
slow_query_log :关闭慢查询日志。
slow_query log_file :慢查询日志文件。
slow
aunch_time: thread create 时间,单位为秒,如果 thread create 的时间超过了这个值,该变量 slow_launch_ time 的值会加1
log-quer es-not using-indexes :记录未添加索引的 SQL 语句
开启 MySQL 慢查询日志方法有以下两种:
(1) MySQL 数据库命令行执行命令如下:

MariaDB [(none)]> set global slow_query_log = on;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show variables like "%slow%";
+---------------------+--------------------------------------------------------------------------------------------------------------+
| Variable_name       | Value                                                                                                        |
+---------------------+--------------------------------------------------------------------------------------------------------------+
| log_slow_filter     | admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk |
| log_slow_queries    | ON                                                                                                           |
| log_slow_rate_limit | 1                                                                                                            |
| log_slow_verbosity  |                                                                                                              |
| slow_launch_time    | 2                                                                                                            |
| slow_query_log      | ON                                                                                                           |
| slow_query_log_file | yun1-slow.log                                                                                                |
+---------------------+--------------------------------------------------------------------------------------------------------------+
7 rows in set (0.00 sec)

(2 )编辑 my.cnf 配置文件中添加代码如下

vim /etc/my.cnf
log-slow-queries = /data/mysql/localhost. log 
long_query_time = 0.01 
log-queries-not-using-indexes

慢查询功能开启之后,数据库会自动将执行时间超过设定时间的 SQL 语句陈加至慢询日志文件中,可以通过慢查询日志文件定位执行慢的 SQL ,从而对其优化,可以通过mysqldumpslow 命令行工具分析日志。
执行命令 mysqldumps ow 可以查看命令帮助信息,主要参数包括-s 和-t,其中-s是排序参数,可选项详解如下
l: 查询锁的总时间。
r: 返回记录数。
t: 查询总时间排序。
al: 平均锁定时间。
ar: 平均返回记录数
at: 平均 询时间
c: 计数
-t n:显示头 条记录
MySQL 慢查询 mysqldumpslow 按照返回的行数从大到小,查看前 行

# cd /var/lib/mysql
mysqldumpslow -s r -t 2 yun1-slow.log 

Reading mysql slow query log from yun1-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=0.0 (0), Rows_examined=0.0 (0), 0users@0hosts
  

Died at /usr/bin/mysqldumpslow line 178, <> chunk 1

MySQL 慢查询 mysqldumpslow 按照查询总时间从大到小,查看前 行,同时过滤select SQL 语句

[root@yun1 mysql]# mysqldumpslow -s r -t 5 -g "select" yun1-slow.log 

Reading mysql slow query log from yun1-slow.log
Died at /usr/bin/mysqldumpslow line 178, <> chunk 1.

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。