mysql語句性能分析工具之profiling用法
以往我們已經(jīng)介紹了一個(gè)mysql的分析工具:mysql慢查詢?nèi)罩痉治龉ぞ撸╬t-query-digest),可以看我的文章:mysql慢查詢?nèi)罩痉治龉ぞ撸╬t-query-digest)
一、profiling的介紹
sql查詢慢的情況很常見,對(duì)于慢sql的優(yōu)化有三個(gè)步驟,又稱優(yōu)化三板斧。
- 板斧一:查看執(zhí)行計(jì)劃explain
- 板斧二:建立合適索引
- 板斧三:使用合適的連接關(guān)系和過濾條件來實(shí)現(xiàn)sql語句的優(yōu)化
如果執(zhí)行計(jì)劃正確sql語句的性能還很慢,可以通過mysql的profiling工具進(jìn)行定位分析。
為了更精準(zhǔn)的定位一條sql語句的性能問題,需要清楚的直到這條sql語句運(yùn)行時(shí)消耗多少系統(tǒng)資源。
mysql中profiling工具可以滿足此需求,通過該工具可以獲取一條sql語句在執(zhí)行過程中多種資源的消耗情況——比如cpu,io,ipc,swap等資源消耗情況。
二、profiling使用方法
2.1、啟用命令
set profiling = 1;
2.2、啟動(dòng)命令后,運(yùn)行想要查詢性能的sql語句
select * from xiatui where name like '0%' and age = '9803' and sex =0;
2.3、查詢上述sql語句信息
show profiles;
說明:
- Query_ID:sql語句的id編號(hào),這個(gè)編號(hào)會(huì)在步驟4、5用到
- Duration:sql語句執(zhí)行時(shí)長
- Query:具體的sql語句
2.4、查詢資源消耗情況
SHOW PROFILE CPU, BLOCK IO FOR QUERY 360;
上述360就是第三步驟的Query_ID值,想要查詢哪條sql語句,就輸入哪條sql語句對(duì)應(yīng)的id值。
2.5、查詢某條sql語句的具體執(zhí)行時(shí)間
SHOW PROFILE FOR QUERY 391;
優(yōu)化建議:
如果想要優(yōu)化某條sql語句,可以關(guān)注一下該條sql語句的show profile結(jié)果中每個(gè)階段的耗時(shí),分析耗時(shí)最長的階段。
如果status列出現(xiàn)下面的信息就可以考慮對(duì)sql語句進(jìn)行優(yōu)化:
- converting heap to MyISAM:查詢結(jié)果太大,內(nèi)存不夠用
- creating tmp table:創(chuàng)建了臨時(shí)表。先拷貝數(shù)據(jù)到臨時(shí)表,用完后再刪除臨時(shí)表。
- copying to tmp table on disk:把內(nèi)存中臨時(shí)表復(fù)制到磁盤上
- locked:發(fā)生了死鎖行為。
2.6、關(guān)閉
set profiling = 0;
三、整體使用過程
set profiling = 1; select /*+ no_icp(xiatui) */ * from xiatui where name like '0%' and age = '9803' and sex =0; select * from xiatui where name like '0%' and age = '9803' and sex =0; show profiles; set profiling = 0;
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL外鍵約束常見操作方法示例【查看、添加、修改、刪除】
這篇文章主要介紹了MySQL外鍵約束常見操作方法,結(jié)合實(shí)例形式分析了mysql針對(duì)外鍵約束的查看、添加、修改、刪除等相關(guān)操作實(shí)現(xiàn)方法,需要的朋友可以參考下2018-05-05JMeter對(duì)MySQL數(shù)據(jù)庫進(jìn)行壓力測試的實(shí)現(xiàn)步驟
本文主要介紹了JMeter對(duì)MySQL數(shù)據(jù)庫進(jìn)行壓力測試的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01MySQL多表聯(lián)合查詢、連接查詢、子查詢的實(shí)現(xiàn)
本文主要介紹了MySQL多表聯(lián)合查詢、連接查詢、子查詢的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07解決Mysql:ERROR?1045?(28000):Access?denied?for?user?‘roo
最近在我們連接數(shù)據(jù)庫的時(shí)候遇到個(gè)問題,感覺還挺容易遇到的,所以總結(jié)下,這篇文章主要給大家介紹了關(guān)于解決Mysql:ERROR?1045?(28000):Access?denied?for?user?‘root‘@‘localhost‘?(using?password:?NO)的方法,需要的朋友可以參考下2022-06-06MySQL數(shù)據(jù)同步Elasticsearch的4種方案
本文主要介紹了MySQL數(shù)據(jù)同步Elasticsearch的4種方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03MySQL中ON DUPLICATE key update的使用
本文主要介紹了MySQL中ON DUPLICATE key update的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05