MySQL中如何启用并分析慢查询日志
MySQL中如何启用并分析慢查询日志,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Mysql有一项功能可以记录长时间查询的慢记录,具体是多长时间可以自己配置,但是慢查询也未必就是不良的SQL,也可能受其他查询影响,或者是系统资源限制导致的,它也是我们常用的性能分析工具。【相关推荐:mysql视频教程】
MySQL的慢查询日志由long_query_time
和min_examined_row_limit
控制的,前者意思是如果查询花费的时间超过这么多秒,MySQL服务器就是在启用慢查询日志的情况下,将这条记录到慢查询日志文件中。
要在 MySQL 中启用慢查询日志,请按照下列步骤操作:
首先看看MySQL中关于慢查询的状态。
MariaDB[(none)]>showvariableslike'%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|+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+9rowsinset(0.001sec)
首先看slow_query_log
的状态,他代表慢查询日志是否开启。该值可以是0或OFF表示禁用,1或ON表示启用。日志输出的目的地由log_output
系统变量控制,如果该值为NONE
,则即使启用了慢查询日志,也不会写入到日志中,log_output
变量的取值如下:
TABLE: (默认)向mysql.general_log
表写入一般查询,向表mysql.slow_log
写入慢速查询 。
FILE:将一般和慢速查询日志写入文件系统。
NONE – 禁用日志记录。
还有general_log_file
与slow_query_log_file
变量代表查询日志和慢查询日志文件的名称。可以在服务器启动或运行时设置这些变量。
启动慢查询日志
MySQL中默认关闭了慢查询日志功能,因此要打开此功能,我们需要将slow_query_log
设置为ON,如下所示。
SETGLOBALslow_query_log=1;
设置记录时长
long_query_time
变量表示只有运行时间超过此值就会被记录,如下所示,更改时间为5秒,他默认为10秒,最小值为 0。
SETGLOBALlong_query_time=5;
修改输出位置
默认情况下,慢查询日志文件位于 /var/lib/mysql/hostname-slow.log
,我们还可以使用slow_query_log_file
变量设置另一个位置。
SETGLOBALslow_query_log_file='/var/log/mysql/mysql-slow.log';
将慢查询日志写入表
慢查询日志也可以被写入slow_log
表中,方式就是上述中所说修改log_output
系统变量为TABLE
,操作如下:
SETGLOBALlog_output='TABLE';
慢查询日志相关的变量
slow_query_log - 启用/禁用慢查询日志
log_output - 如何写入输出
slow_query_log_file - 慢查询日志文件的名称
long_query_time - 定义慢查询的时间(以秒/微秒为单位)
log_queries_not_using_indexes - 是否记录不使用索引的查询
log_slow_admin_statements - 是否记录某些管理语句
log_slow_disabled_statements - 不应记录在慢查询日志中的语句类型
min_examined_row_limit - 查询必须检查的最小行数才能变慢
log_slow_rate_limit - 允许记录一部分慢查询
log_slow_verbosity - 日志中的详细信息量
log_slow_filter - 限制要记录的查询
分析慢查询日志记录后,我们还需要分析这些日志,找出影响系统的查询,MySQL提供了一个名为mysqldumpslow的工具,可以简单的显示结果,只需要把日志路径传递给他即可,如下:
#mysqldumpslow-amysql-slow.logReadingmysqlslowquerylogfrommysql-slow.logCount:1Time=0.00s(0s)Lock=0.00s(0s)Rows_sent=21.0(21),Rows_examined=21.0(21),Rows_affected=0.0(0),root[root]@localhostshowdatabasesCount:1Time=0.00s(0s)Lock=0.00s(0s)Rows_sent=2.0(2),Rows_examined=2.0(2),Rows_affected=0.0(0),root[root]@localhostselect*fromusersCount:1Time=0.00s(0s)Lock=0.00s(0s)Rows_sent=1.0(1),Rows_examined=0.0(0),Rows_affected=0.0(0),root[root]@localhostselect@@version_commentlimit1Count:1Time=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 ,总时间中包含锁定时间
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。