天天看點

如何使用性能分析工具定位SQL執行慢的原因?資料庫伺服器的優化步驟總結

但實際上 SQL 執行起來可能還是很慢,那麼到底從哪裡定位 SQL 查詢慢的問題呢?是索引設計的問題?伺服器參數配置的問題?還是需要增加緩存的問題呢?性能分析來入手分析,定位導緻 SQL 執行慢的原因。

前面已經更新了總結核心的主要三點

那講了這這麼多資料庫伺服器的優化分析的步驟是怎樣的?中間有哪些需要注意的地方?本篇主要是針對這一個話題的總結和概括。

資料庫伺服器的優化步驟

當我們遇到資料庫調優問題的時候,該如何思考呢?我把思考的流程整理成了下面這張圖。

如何使用性能分析工具定位SQL執行慢的原因?資料庫伺服器的優化步驟總結

整個流程劃分成了觀察(Show status)和行動(Action)兩個部分。字母 S 的部分代表觀察(會使用相應的分析工具),字母 A 代表的部分是行動(對應分析可以采取的行動)

通過觀察了解資料庫整體的運作狀态,通過性能分析工具可以讓我們了解執行慢的 SQL 都有哪些,檢視具體的 SQL 執行計劃,甚至是 SQL 執行中的每一步的成本代價,這樣才能定位問題所在,找到了問題,再采取相應的行動

詳細解釋一下這張圖

首先在 S1 部分,我們需要觀察伺服器的狀态是否存在周期性的波動。如果存在周期性波動,有可能是周期性節點的原因,比如雙十一、促銷活動等。這樣的話,我們可以通過 A1 這一步驟解決,也就是加緩存,或者更改緩存失效政策

如果緩存政策沒有解決,或者不是周期性波動的原因,我們就需要進一步分析查詢延遲和卡頓的原因。接下來進入 S2 這一步,我們需要開啟慢查詢。慢查詢可以幫我們定位執行慢的 SQL 語句。我們可以通過設定long_query_time參數定義“慢”的門檻值,如果 SQL 執行時間超過了long_query_time,則會認為是慢查詢。當收集上來這些慢查詢之後,我們就可以通過分析工具對慢查詢日志進行分析

在 S3 這一步驟中,我們就知道了執行慢的 SQL 語句,這樣就可以針對性地用 EXPLAIN 檢視對應 SQL 語句的執行計劃,或者使用 SHOW PROFILE 檢視 SQL 中每一個步驟的時間成本。這樣我們就可以了解 SQL 查詢慢是因為執行時間長,還是等待時間長

如果是 SQL 等待時間長,我們進入 A2 步驟。在這一步驟中,我們可以調優伺服器的參數,比如适當增加資料庫緩沖池等。如果是 SQL 執行時間長,就進入 A3 步驟,這一步中我們需要考慮是索引設計的問題?還是查詢關聯的資料表過多?還是因為資料表的字段設計問題導緻了這一現象。然後在這些次元上進行對應的調整

如果 A2 和 A3 都不能解決問題,我們需要考慮資料庫自身的 SQL 查詢性能是否已經達到了瓶頸,如果确認沒有達到性能瓶頸,就需要重新檢查,重複以上的步驟。如果已經達到了性能瓶頸,進入 A4 階段,需要考慮增加伺服器,采用讀寫分離的架構,或者考慮對資料庫分庫分表,比如垂直分庫、垂直分表和水準分表等

以上就是資料庫調優的流程思路。當我們發現執行 SQL 時存在不規則延遲或卡頓的時候,就可以采用分析工具幫我們定位有問題的 SQL,這三種分析工具你可以了解是 SQL 調優的三個步驟:慢查詢、EXPLAIN 和 SHOW PROFILE

總結

結合前面三篇的分步解讀分析

  • 從步驟上看,我們需要先進行觀察和分析,分析工具的使用在日常工作中還是很重要的。今天隻介紹了常用的三種分析工具,實際上可以使用的分析工具還有很多。

這裡總結一下文章裡提到的三種分析工具。我們可以通過慢查詢日志定位執行慢的 SQL,然後通過 EXPLAIN 分析該 SQL 語句是否使用到了索引,以及具體的資料表通路方式是怎樣的。我們也可以使用 SHOW PROFILE 進一步了解 SQL 每一步的執行時間,包括 I/O 和 CPU 等資源的使用情況

如何使用性能分析工具定位SQL執行慢的原因?資料庫伺服器的優化步驟總結