應(yīng)用實(shí)踐:四步法分析定位生產(chǎn)環(huán)境下MySQL上千條SQL中的問題所在
***步:通過以下兩種方式之一來打開慢查詢功能
(1)方式一:通過修改mysql的my.cnf文件
如果是5.0或5.1等版本需要增加以下選項(xiàng):
- log-slow-queries="mysql_slow_query.log"
如果是5.5版本以上可以增加如下選項(xiàng):
- slow-query-log=On
- slow_query_log_file="mysql_slow_query.log"
- log-query-not-using-indexes
但是以上修改mysql配置文件的方式需要重啟mysql,這也是它的缺點(diǎn)。
(2)方式二:通過依次執(zhí)行mysql的如下命令的方式:
- set global slow_query_log=ON;
- set global long_query_time = 3600;
- set global log_querise_not_using_indexes = ON;
第二步:通過如下命令來查看mysql的慢查詢是否已經(jīng)打開
1)查看設(shè)置的屬于慢查詢的時(shí)間
- show variables like "long_query_time";
執(zhí)行結(jié)果如下:

2)查詢mysql的慢查詢的日志存儲(chǔ)的相關(guān)信息
- show variables like "%slow%";
執(zhí)行結(jié)果如下:

第三步:案例講解如何使用
(1)利用以下語句代替真實(shí)的操作比較慢的查詢語句
原因:一般mysql的執(zhí)行速度都是比較快的,想要達(dá)到10s需要造的數(shù)據(jù)比較多。因此用以下語句模擬就比較容易:
- select sleep(10);
(2)通過以下語句進(jìn)行查詢,當(dāng)前的語句有多少是數(shù)據(jù)慢查詢的
- show global status like '%slow%';
執(zhí)行結(jié)果如下:

結(jié)果解釋:因?yàn)閯偛艌?zhí)行了一個(gè)sleep語句,所以Slow_queries里邊的數(shù)值變?yōu)?了。
第四步:通過最終的日志來分析查詢語句慢的真正原因:
具體操作辦法就是查看日志。比如剛才產(chǎn)生了一條慢查詢了,因此,日志內(nèi)容如下:

過以上可以看到,查詢慢的語句是select sleep(10);
但是實(shí)際生產(chǎn)環(huán)境下產(chǎn)生的慢查詢的sql語句需要借助explain進(jìn)行分析,然后根據(jù)獲取的相關(guān)信息進(jìn)行針對(duì)性改進(jìn)。