49

应用实践:四步法分析定位生产环境下MySQL上千条SQL中的问题所在

 5 years ago
source link: http://database.51cto.com/art/201809/584455.htm?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

yQFFvaq.jpg!web

第一步:通过以下两种方式之一来打开慢查询功能

(1)方式一:通过修改mysql的my.cnf文件

如果是5.0或5.1等版本需要增加以下选项:

log-slow-queries="mysql_slow_query.log" 

如果是5.5版本以上可以增加如下选项:

slow-query-log=On  
slow_query_log_file="mysql_slow_query.log"  
log-query-not-using-indexes  

但是以上修改mysql配置文件的方式需要重启mysql,这也是它的缺点。

(2)方式二:通过依次执行mysql的如下命令的方式:

set global slow_query_log=ON;  
set global long_query_time = 3600;  
set global log_querise_not_using_indexes = ON;  

第二步:通过如下命令来查看mysql的慢查询是否已经打开

1)查看设置的属于慢查询的时间

show variables like "long_query_time"; 

执行结果如下:

UriUzmM.jpg!web

2)查询mysql的慢查询的日志存储的相关信息

show variables like "%slow%"; 

执行结果如下:

uMRVFfq.jpg!web

第三步:案例讲解如何使用

(1)利用以下语句代替真实的操作比较慢的查询语句

原因:一般mysql的执行速度都是比较快的,想要达到10s需要造的数据比较多。因此用以下语句模拟就比较容易:

select sleep(10); 

(2)通过以下语句进行查询,当前的语句有多少是数据慢查询的

show global status like '%slow%'; 

执行结果如下:

UnQ3EvI.jpg!web

结果解释:因为刚才执行了一个sleep语句,所以Slow_queries里边的数值变为1了。

第四步:通过最终的日志来分析查询语句慢的真正原因:

具体操作办法就是查看日志。比如刚才产生了一条慢查询了,因此,日志内容如下:

7zYJBjZ.jpg!web

过以上可以看到,查询慢的语句是select sleep(10);

但是实际生产环境下产生的慢查询的sql语句需要借助explain进行分析,然后根据获取的相关信息进行针对性改进。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK