MySQL数据库中如何定位慢查询

  

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>

 MySQL数据库中如何定位慢查询”> <br/> slow_log </p> <p>其中,start_time为执行时间,user_host为用户的主机名,query_time为查询所花费的时间,lock_time为该查询使用锁的时间,rows_sent为这条查询返回了多少数据给客户端,rows_examined表示这条语句扫描了多少行,db为数据库,sql_text为这条SQL, thread_id为执行这条查询的线程id。</p> <p>这样我们就可以通过slow_log表的数据进行分析,然后对SQL进行调优了。</p> <p>以上是通过表来进行分析的,下面来通过文件的慢查询是怎么样的。</p> <p>如果不知道文件保存在哪里,可以使用<代码>显示变量如& # 39;% slow_query_log_file % & # 39;> </代码来查看文件保存位置,打开慢查询日志文件,可以看出每五行表示一个慢SQL,这样查看比较费的事,可以使用一些工具来查看。</p> <p> <img src=MySQL数据库中如何定位慢查询