MySQL慢查詢的可能緣由及解決思路

要有高性能的MySQL服務,不只須要設計好的庫表結構、好的索引,還須要有好的查詢。算法

也就是說,一個慢查詢的出現,能夠從服務器、庫表結構、索引、查詢語句等方面着手。緩存

對查詢進行性能剖析有兩種方式,一種是剖析服務器負載,另外一種是剖析單條查詢。服務器

 

1.剖析服務器負載工具

 

1.1捕獲慢查詢性能

使用慢查詢日誌。慢查詢日誌是開銷最低、精度最高的測量查詢時間的工具,並且I/O開銷能夠忽略不計。優化

但若是長期開啓慢查詢日誌,應部署好日誌輪轉(log rotation)工具。或者只在收集負載樣本的期間開啓。設計

MySQL還有一種查詢日誌,叫通用日誌,在查詢請求到服務器時進行記錄。日誌

 

1.2分析查詢日誌orm

使用pt-query-digest能夠從慢查詢日誌生成剖析報告。肯定須要優化的查詢後,能夠利用生成的報告迅速的檢查查詢的執行狀況。索引

 

2.剖析單條查詢

實際應用中有三個方法:SHOW SATUS, SHOW PROFILE, 檢查慢查詢日誌的條目。

2.1 使用 SHOW PROFILE

當一條查詢提交給服務器時,此工具會記錄剖析信息到一張臨時表,而且給查詢賦予一個從1開始的整數標識符。

剖析報告會給出查詢執行的每一個步驟及其花費的時間。

2.2 使用SHOW STATUS

SHOW STATUS 返回了一些計數器,既有服務器級別的全局服務器,也有基於某個鏈接的會話級別的計數器。能夠顯示某些活動如讀索引的頻繁程度,但沒法給出消耗了多少時間。用於猜想哪些操做操做代價較高或者消耗的時間較多。

2.3使用慢查詢日誌

包含了 SHOW PROFILE 和 SHOW STATUS 全部的輸出,還有更多信息。

2.4 使用Performance Schema

 

3.使用性能剖析

慢查詢日誌中記錄到有查詢異常慢的問題,多是系統中有其餘東西消耗了資源,也多是某種類型的鎖或者爭用阻塞了查詢的進度。

 

4.診斷間歇性問題

 一些可能的狀況:

1.從運行得很慢得外部服務來獲取數據

2.緩存中的一些重要條目過時,致使大量請求落到MySQL以從新生成緩存條目。

3.DNS查詢偶爾會有超時現象

4,因爲互斥鎖爭用或內部刪除緩存算法的效率過低時,MySQL查詢緩存有時致使服務由短暫的停頓

 

判斷是單條查詢問題仍是服務器問題

相關文章
相關標籤/搜索