이 기사에서는 MySQL의 느린 쿼리를 이해하고 느린 쿼리 로그를 활성화하는 방법을 소개하며 느린 쿼리를 분석하는 것이 모든 사람에게 도움이 되기를 바랍니다.
Mysql에는 장기 쿼리의 느린 기록을 기록할 수 있는 기능이 있습니다. 특정 기간은 직접 구성할 수 있습니다. 그러나 느린 쿼리가 반드시 나쁜 SQL에 의해 영향을 받거나 발생할 수도 있습니다. 예, 일반적으로 사용되는 성능 분석 도구이기도 합니다. [관련 권장사항: mysql 동영상 튜토리얼]
MySQL의 느린 쿼리 로그는 long_query_time
및 min_examined_row_limit
에 의해 제어됩니다. 전자는 쿼리가 몇 초 이상 걸리는지를 의미합니다. 느린 쿼리 로그가 활성화되면 MySQL 서버는 이를 느린 쿼리 로그 파일에 기록합니다. long_query_time
和min_examined_row_limit
控制的,前者意思是如果查询花费的时间超过这么多秒,MySQL服务器就是在启用慢查询日志的情况下,将这条记录到慢查询日志文件中。
要在 MySQL 中启用慢查询日志,请按照下列步骤操作:
首先看看MySQL中关于慢查询的状态。
MariaDB [(none)]> show variables like '%slow%'; +------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ | Variable_name | Value | +------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ | log_slow_admin_statements | ON | | log_slow_disabled_statements | sp | | log_slow_filter | admin,filesort,filesort_on_disk,filesort_priority_queue,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk | | log_slow_rate_limit | 1 | | log_slow_slave_statements | ON | | log_slow_verbosity | | | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | hxl-slow.log | +------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ 9 rows in set (0.001 sec)
首先看slow_query_log
的状态,他代表慢查询日志是否开启。该值可以是0或OFF表示禁用,1或ON表示启用。日志输出的目的地由log_output
系统变量控制,如果该值为NONE
,则即使启用了慢查询日志,也不会写入到日志中,log_output
变量的取值如下:
mysql.general_log
表写入一般查询,向表mysql.slow_log
写入慢速查询 。还有general_log_file
与slow_query_log_file
变量代表查询日志和慢查询日志文件的名称。可以在服务器启动或运行时设置这些变量。
启动慢查询日志
MySQL中默认关闭了慢查询日志功能,因此要打开此功能,我们需要将slow_query_log
设置为ON,如下所示。
SET GLOBAL slow_query_log = 1;
设置记录时长
long_query_time
变量表示只有运行时间超过此值就会被记录,如下所示,更改时间为5秒,他默认为10秒,最小值为 0。
SET GLOBAL long_query_time = 5;
修改输出位置
默认情况下,慢查询日志文件位于 /var/lib/mysql/hostname-slow.log
,我们还可以使用slow_query_log_file
变量设置另一个位置。
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
将慢查询日志写入表
慢查询日志也可以被写入slow_log
表中,方式就是上述中所说修改log_output
系统变量为TABLE
MySQL에서 느린 쿼리 로그를 활성화하려면 다음 단계를 따르세요.
먼저 MySQL에서 느린 쿼리 상태를 살펴보세요. 🎜SET GLOBAL log_output='TABLE';
slow_query_log
상태를 살펴보세요. 값은 0 또는 OFF(비활성화), 1 또는 ON(활성화)일 수 있습니다. 로그 출력 대상은 log_output
시스템 변수에 의해 제어됩니다. 값이 NONE
인 경우 느린 쿼리 로그가 활성화되어도 로그에 기록되지 않습니다. log.log log_output
변수의 값은 다음과 같습니다. 🎜mysql.general_log
테이블에 일반 쿼리를 작성하고 일반을 작성합니다. 테이블 mysql.slow_log< /code>에 대한 쿼리 느린 쿼리를 작성합니다. </li><li>FILE: 일반 및 느린 쿼리 로그를 파일 시스템에 기록합니다. </li><li>NONE – 로깅을 비활성화합니다. </li></ul>🎜쿼리 로그 및 느린 쿼리 로그 파일의 이름을 나타내는 <code>general_log_file
및 slow_query_log_file
변수도 있습니다. 이러한 변수는 서버가 시작되거나 실행될 때 설정할 수 있습니다. 🎜🎜🎜느린 쿼리 로그 시작🎜🎜🎜느린 쿼리 로그 기능은 MySQL에서 기본적으로 꺼져 있으므로 이 기능을 활성화하려면 아래와 같이 slow_query_log
를 ON으로 설정해야 합니다. 🎜# mysqldumpslow -a mysql-slow.log Reading mysql slow query log from mysql-slow.log Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=21.0 (21), Rows_examined=21.0 (21), Rows_affected=0.0 (0), root[root]@localhost show databases Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=2.0 (2), Rows_examined=2.0 (2), Rows_affected=0.0 (0), root[root]@localhost select * from users Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost select @@version_comment limit 1 Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost
long_query_time
변수는 이 값을 초과하는 실행 시간만 기록한다는 의미로 아래와 같이 변경 시간은 5초, 기본값은 10초입니다. 이며 최소값은 0입니다. 🎜rrreee🎜🎜출력 위치 수정🎜🎜🎜기본적으로 느린 쿼리 로그 파일은 /var/lib/mysql/hostname-slow.log
에 있으며 slow_query_log_file을 사용할 수도 있습니다. </code >변수가 다른 위치를 설정합니다. 🎜rrreee🎜🎜느린 쿼리 로그를 테이블에 쓰기🎜🎜🎜느린 쿼리 로그는 위에서 언급한 <code>log_output
시스템 변수를 수정하여 slow_log
테이블에 쓸 수도 있습니다. TABLE
의 경우 작업은 다음과 같습니다. 🎜rrreee🎜🎜느린 쿼리 로그 관련 변수🎜🎜日志记录后,我们还需要分析这些日志,找出影响系统的查询,MySQL提供了一个名为mysqldumpslow的工具,可以简单的显示结果,只需要把日志路径传递给他即可,如下:
# mysqldumpslow -a mysql-slow.log Reading mysql slow query log from mysql-slow.log Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=21.0 (21), Rows_examined=21.0 (21), Rows_affected=0.0 (0), root[root]@localhost show databases Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=2.0 (2), Rows_examined=2.0 (2), Rows_affected=0.0 (0), root[root]@localhost select * from users Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost select @@version_comment limit 1 Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost
他的参数如下
-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://juejin.cn/post/6993221989175394311
更多编程相关知识,请访问:编程视频!!
위 내용은 MySQL에서 느린 쿼리 로그를 활성화하고 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!