MySQL性能分析案例-慢查询
Posted TEST_二 黑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL性能分析案例-慢查询相关的知识,希望对你有一定的参考价值。
1、开启慢查询日志
查看慢查询日志配置信息:show variables like ‘slow_query%’;
参数说明:
slow_query_log: 是否开启慢查询日志,ON:是;OFF;否
slow_query_log_file: 慢查询日志路径
开启慢查询日志:
1set global slow_query_log = on;
设置慢查询日志路径:(如果有需要可更改log路径)
1set global slow_query_log_file = "/var/lib/mysql/slow_query.log";
注:show [global|session] variables; 或 set [global|session] variable_name = val; 语句中,global指全局级别,session指当前会话级别,不选则默认为session。当重启mysql服务之后,global和session配置信息都会失效,按my.ini重新初始化。此处slow_query_log是全局生效的配置,应当使用global,否则可能报错:1229 - Variable ‘slow_query_log’ is a GLOBAL variable and should be set with SET GLOBAL。设置变量值时,ON/on/1,OFF/off/0效果一致。
2、设定慢查询时长
查看慢查询语句执行时间:show global variables like ‘long_query_time’;
mysql慢查询的sql语句执行时长默认是10s, 超过10s就认为出现了慢查询,这个尺度可以根据实际业务自定义。
设置慢查询时长:
1set global long_query_time = 2;
执行时长超过2s就会被记录到slow_query_log_file
3、开启未使用索引sql语句记录
查看未使用索引sql语句配置项:show global variables like ‘log_queries_not_using_indexes’;;
开启记录:
1set global log_queries_not_using_indexes = on;
如此一来,未使用索引的sql语句就会被记录到slow_query_log_file
注意:long_query_time 或 log_queries_not_using_indexes 一项成立,即会写入慢查询日志。
也可以在mysql配置文件中进行设置:
1[mysqld]
2slow_query_log = ON;
3long_query_time = 2;
4log_queries_not_using_indexes = ON;
4、分析慢查询日志:
查看slow_query_log_file指定的文件,
-
Time:sql执行的时间
-
User@Host:执行sql的客户端
-
ID:执行sql的线程id
-
Query_time:执行sql耗时
-
Lock_time:执行sql期间锁定时间
-
Rows_sent:返回的记录行数
-
Rows_examined:检索的行数
也可以使用官方提供的工具mysqldumpslow来查看日志,可以帮助去重,进行一些合并统计
然后根据这些慢查询sql语句进行相关优化调试。
附:在当前命令行中快捷查看慢查询发生的次数:
1show status like 'slow_queries';
注:mysql5.7以下版本只设置系统变量long_query_time值,系统状态slow_queries便会记录,不开启slow_query_log的话不会将慢查询语句记录到日志中;而5.7版本在设置long_query_time的同时还要开启慢查询日志,设置系统变量(全局)slow_query_log为on(或1),然后slow_queries才会记录,每次关闭会话,slow_queries自动清零,但slow_query_log_file指定的日志文件正常记录。
最后:学习资源送上
这些资料,以及上面的面试题资源,对于做软件测试的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
以上是关于MySQL性能分析案例-慢查询的主要内容,如果未能解决你的问题,请参考以下文章