高效能的MySQL(2)單條SQL效能

2021-09-03 08:34:36 字數 1628 閱讀 3296

實際應用中,分析單條查詢sql效能,有3種方法:show status、show profile和慢查詢日誌。

一、使用show profile

1、預設是禁用的,在會話中開啟

#開啟profile

set profiling=1;

2、當乙個查詢到達伺服器時,此工具會把分析資訊記錄到一張臨時表,並且給查詢賦予乙個從1開始的整數識別符號,可以通過show profiles檢視。

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語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引...