我們?cè)谧?a href="http://hgh666.cn/Products/PerformanceRunner.asp">性能測(cè)試的時(shí)候,慢sql也可以說(shuō)是很常見(jiàn)問(wèn)題,我的性能測(cè)試生涯幾乎經(jīng)常遇到慢sql,那么我們?cè)趺磥?lái)判斷有沒(méi)有慢sql呢,有慢sql后怎么來(lái)分析優(yōu)化呢?如圖:
通過(guò)上圖看可以看到當(dāng)存在慢sql的時(shí)候,這里會(huì)有計(jì)數(shù),在之前我們還要查詢(xún)一下有沒(méi)有開(kāi)啟慢sql,
1)通過(guò)語(yǔ)句直接查詢(xún):show variables like 'slow_query%';輸出結(jié)果
可以看到 慢查詢(xún)?nèi)罩臼情_(kāi)啟的,如果沒(méi)有開(kāi)啟,
執(zhí)行set global slow_query_log='ON'; 開(kāi)啟慢sql日志即可
2)查詢(xún)一下sql語(yǔ)句執(zhí)行超過(guò)多久后會(huì)當(dāng)慢sql的記錄:
show variables like '%long_query_time%'; 輸出結(jié)果
經(jīng)查詢(xún)可知sql語(yǔ)句執(zhí)行超過(guò)1s就會(huì)當(dāng)慢sql進(jìn)行記錄,當(dāng)我們想修改這個(gè)時(shí)間的時(shí)候,執(zhí)行語(yǔ)句:set long_query_time=0.5;
3)我們來(lái)隨便執(zhí)行一個(gè)sql 看一下監(jiān)控效果
SELECT * from test LIMIT 100000;
4)我們看一下執(zhí)行計(jì)劃,為什么這個(gè)sql這么慢
EXPLAIN SELECT * from test LIMIT 100000;
可以看出索引類(lèi)型是全局索引,我這里是為了演示,實(shí)際測(cè)試時(shí)候如果出現(xiàn)是不可以的
5)既然這個(gè)sql慢,我們接下來(lái)分析一下吧
啟用profiling:SET profiling=1;
查看profiling 是否啟用:SELECT @@profiling; 0 代表沒(méi)有啟用
執(zhí)行需要分析的sql:SELECT * from test LIMIT 100000;
獲取上面sql執(zhí)行的Query_ID:show profiles;
查詢(xún)消耗等信息: show PROFILE ALL FOR QUERY "要分析的語(yǔ)句的Query_ID";
可以看到sql的執(zhí)行過(guò)程耗時(shí)等信息
關(guān)閉profiling:SET profiling = 0;
推薦閱讀:
本文內(nèi)容不用于商業(yè)目的,如涉及知識(shí)產(chǎn)權(quán)問(wèn)題,請(qǐng)權(quán)利人聯(lián)系SPASVO小編(021-60725088-8054),我們將立即處理,馬上刪除。