實際應用中,分析單條查詢sql效能,有3種方法:show status、show profile和慢查詢日誌。
一、使用show profile
1、預設是禁用的,在會話中開啟
2、當乙個查詢到達伺服器時,此工具會把分析資訊記錄到一張臨時表,並且給查詢賦予乙個從1開始的整數識別符號,可以通過show profiles檢視。#開啟profile
set profiling=1;
3、上面只顯示了時間上的精度,但是有些時候我們需要更多的資訊那麼,我們可以使用
show profile for query 1;來看具體資訊
當然我們可以通過information_schema中對應的表來輸出我們想要的資訊。比如
就可以看到下面的格式#要查詢的sql
set @query_id = 1;
select
#執行步驟
state,
#每個步驟總時間
sum(duration) as total_r,
#每個步驟占用總時間比例
round(
100 * sum(duration) /
(select sum(duration) from information_schema.profiling
where query_id = @query_id),2
) as pct_r,
#相同步驟執行次數
count(*) as calls,
#相同步驟平均執行時間
sum(duration) / count(*) as "r/call"
from information_schema.profiling
where query_id = @query_id
group by state
order by total_r desc;
通過結果,可以清楚看到消耗時間最多的是「傳送資料(sending data)」,這裡主要是因為我查詢了乙個有500w記錄的表,並且id沒有使用索引。
二、使用show status
show status 命令返回了一些計數器。既有伺服器級別的全域性計數器,也有基於某個連線的會話級別的計數器。不同的計數器可見範圍不一樣,全域性的計數器也會出現在show status的結果中,容易被誤認為是會話級別的。
show session status/show status 會話級別
show global status 全域性級別
show status 結果只是計數器,無法給出消耗多少時間。
比如檢視會話或者從伺服器啟動以來的增刪改查的次數
下面清空一下,再來做一次原來的查詢show status like "com_insert";
show status like "com_delete";
show status like "com_update";
show status like "com_select";
這個數字說明這個查詢,沒有使用到索引,影響了500w條資料。
三、期待performance schema早日實現和普及吧!
高效能Mysql 2 效能優化
基準測試 針對系統設計的一種壓力測試。基準測試的原因 1.驗證基於系統的一些假設,確認這些假設是否符合實際情況。2.重現系統中的某些異常行為,已解決這些異常。3.測試系統當前的運 況。4.模擬比當前系統更高的負載,找出系統可能遇到的擴充套件性瓶頸。5.測試應用適應可變環境的能力。6.測試不同額硬體 ...
建立高效能索引 《高效能Mysql》筆記2
crate table people last name varchar 50 not null,first name varchar 50 not null,dob date not null,gender enum m f not null,key last name,first name,do...
《高效能MySQL》筆記(2)
mysql儲存 的四種形式 1.觸發器 2.儲存過程 3.函式 4.在定時任務中存放 5.1開始 即事件 儲存過程和儲存函式可以接收引數然後返回值,但是觸發器和事件卻不行 mysql儲存過程 儲存過程 是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引...