mysql語(yǔ)句性能分析工具之profiling用法
以往我們已經(jīng)介紹了一個(gè)mysql的分析工具:mysql慢查詢?nèi)罩痉治龉ぞ撸╬t-query-digest),可以看我的文章:mysql慢查詢?nèi)罩痉治龉ぞ撸╬t-query-digest)
一、profiling的介紹
sql查詢慢的情況很常見(jiàn),對(duì)于慢sql的優(yōu)化有三個(gè)步驟,又稱優(yōu)化三板斧。
- 板斧一:查看執(zhí)行計(jì)劃explain
- 板斧二:建立合適索引
- 板斧三:使用合適的連接關(guān)系和過(guò)濾條件來(lái)實(shí)現(xiàn)sql語(yǔ)句的優(yōu)化
如果執(zhí)行計(jì)劃正確sql語(yǔ)句的性能還很慢,可以通過(guò)mysql的profiling工具進(jìn)行定位分析。
為了更精準(zhǔn)的定位一條sql語(yǔ)句的性能問(wèn)題,需要清楚的直到這條sql語(yǔ)句運(yùn)行時(shí)消耗多少系統(tǒng)資源。
mysql中profiling工具可以滿足此需求,通過(guò)該工具可以獲取一條sql語(yǔ)句在執(zhí)行過(guò)程中多種資源的消耗情況——比如cpu,io,ipc,swap等資源消耗情況。
二、profiling使用方法
2.1、啟用命令
set profiling = 1;
2.2、啟動(dòng)命令后,運(yùn)行想要查詢性能的sql語(yǔ)句
select * from xiatui where name like '0%' and age = '9803' and sex =0;
2.3、查詢上述sql語(yǔ)句信息
show profiles;

說(shuō)明:
- Query_ID:sql語(yǔ)句的id編號(hào),這個(gè)編號(hào)會(huì)在步驟4、5用到
- Duration:sql語(yǔ)句執(zhí)行時(shí)長(zhǎng)
- Query:具體的sql語(yǔ)句
2.4、查詢資源消耗情況
SHOW PROFILE CPU, BLOCK IO FOR QUERY 360;
上述360就是第三步驟的Query_ID值,想要查詢哪條sql語(yǔ)句,就輸入哪條sql語(yǔ)句對(duì)應(yīng)的id值。

2.5、查詢某條sql語(yǔ)句的具體執(zhí)行時(shí)間
SHOW PROFILE FOR QUERY 391;

優(yōu)化建議:
如果想要優(yōu)化某條sql語(yǔ)句,可以關(guān)注一下該條sql語(yǔ)句的show profile結(jié)果中每個(gè)階段的耗時(shí),分析耗時(shí)最長(zhǎng)的階段。
如果status列出現(xiàn)下面的信息就可以考慮對(duì)sql語(yǔ)句進(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ù)制到磁盤(pán)上
- locked:發(fā)生了死鎖行為。
2.6、關(guān)閉
set profiling = 0;
三、整體使用過(guò)程
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字符串的‘123’轉(zhuǎn)換為數(shù)字的123的實(shí)例
下面小編就為大家?guī)?lái)一篇mysql字符串的‘123’轉(zhuǎn)換為數(shù)字的123的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
Mysql select in 按id排序?qū)崿F(xiàn)方法
有時(shí)候我們?cè)诤笈_(tái)選擇了一系列的id,我們想安裝填寫(xiě)id的順序進(jìn)行排序,那么就需要下面的order by方法,測(cè)試通過(guò)2013-03-03
MySQL 8.0.18給數(shù)據(jù)庫(kù)添加用戶和賦權(quán)問(wèn)題
這篇文章主要介紹了MySQL 8.0.18給數(shù)據(jù)庫(kù)添加用戶和賦權(quán)問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
MySql 存儲(chǔ)引擎和索引相關(guān)知識(shí)總結(jié)
這篇文章主要介紹了MySql 存儲(chǔ)引擎和索引相關(guān)知識(shí)總結(jié),文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06

