MySQL数据库中如何定位慢查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
相信大家在平时工作中都有过SQL优化经历,那么在优化前就必须找到慢SQL方可进行分析。这篇文章就介绍下如何定位到慢查询。
慢查询日志是MySQL内置的一项功能,可以记录执行超过指定时间的SQL语句。
以下是慢查询的相关参数,大家感兴趣的可以看下:
参数含义log_output日志输出位置,默认为文件,即保存为文件,若设置为表,则将日志记录到MySQL。show_log表中,支持设置多种格式slow_query_log_file指定慢查询日志文件的路径和名字,可使用绝对路径指定,默认值是主机名运行效率低下。日志,位于配置的datadir目录long_query_time执行时间超过该值才记录到慢查询日志,单位为秒,默认为10 min_examined_row_limit对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中,默认为0 log_queries_not_using_indexes是否将未使用索引的SQL记录到慢查询日志中,开启此配置后会无视long_query_time参数,默认为OFFlog_throttle_queries_not_using_indexes设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间,默认为0 log-slow-admin-statements记录执行缓慢的管理SQL,如改变表,分析表,检查表,创建指数,指数下降,优化表和维修表,默认为OFFlog_slow_slave_statements记录从库上执行的慢查询语句,如果binlog的值为一行,则失效,默认为了
有两种方式可以开启慢查询
- <李>修改配置文件李> <李>设置全局变量
李,>
方式一需要修改配置文件我。ini,在(mysqld)段落中加入如下参数:
(mysqld) log_output=& # 39;文件,表# 39; slow_query_log=& # 39;在# 39; long_query_time=0.001
然后需要重启MySQL才可以生效,命令为<代码>服务mysqld重启代码>
方式二无需重启即可生效,但是重启会导致设置失效,设置的命令如下所示:
设置全球slow_query_log=& # 39;在# 39;; 集全球log_output=& # 39;文件,表# 39;; 集全球long_query_time=0.001;
这样就可以将慢查询日志同时记录在文件以及mysql。slow_log表中。
通过第二种方式开启慢查询日志,然后使用全表查询语句<代码> SELECT *从用户代码>
然后再查询慢查询日志:<代码> SELECT *从mysql。slow_log> 代码,可以发现其中有这样一条记录: