1. 程式人生 > 實用技巧 >MySql語句效能問題定位--從sql語句到磁碟IO檢查

MySql語句效能問題定位--從sql語句到磁碟IO檢查

一、背景

本文只針對IO導致MySql效能問題的定位,其他如CPU、MySql引數配置、程式自身等問題需要進一步補充。原因某條sql建表語句運行了15秒

二、步聚

Step1:

開啟profiling

SETprofiling=1;

關閉

SETprofiling=off;

找到執行慢的sql語句ID

showprofiles;

檢視sql語句CPU/IO等耗時具體的量化資料

showprofileCPU,SWAPS,BLOCKIO,MEMORY,CONTEXTSWITCHES,IPC,PAGEFAULTS,SOURCEforquery39;

spacer.gifwKiom1fSf8jwKXY-AAElAfht6zo458.jpg-wh_50

結論:

從上圖可見CPU耗時不多,反而IO操作佔了大部分的耗時。下面讓我們來找出伺服器的哪些程序在佔用IO資源。

Step2:

檢視伺服器linux IO:

iostat-x1

wKioL1fSf-HgvkbQAAEJE9QbyXo514.jpg-wh_50

spacer.gif

找出哪些程序在瘋狂的進行IO操作:

  • iotop

spacer.gifwKiom1fSf_PBaJhiAAFuzzRoTGA128.jpg-wh_50

結論:

發現磁碟的讀寫都很高,而且svctm與await相差很大。

1,await的值遠高於svctm的值,則表示I/O佇列等待太長,系統上執行的應用程式將變慢。

2,%util項的值也是衡量磁碟I/O的一個重要指標,%util接近100%,表示磁碟產生的I/O請求太多,I/O系統已經滿負荷的在工作,該磁碟可能存在瓶頸。

所以,確實是磁碟高IO操作,導致sql效能問題。而且是mysql本身IO特別高。

Setp3:

使用pt-ioprofile,查出哪些檔案的IO操作高。命令如下,

下載連線:https://www.percona.com/doc/percona-toolkit/2.2/installation.html

yuminstallpercona-toolkit-2.2.17-1.noarch.rpm
pt-ioprofile--profile-pid=44937--cell=sizes

spacer.gif

wKiom1fSgFfzq0ZNAAH2cKYERLE617.jpg-wh_50

總結:

從上圖可以看出,資料庫中,某些表的讀寫操作是造成IO一直很高的主要原因,並嚴重影響了sql的查詢效能。

定位到具體某個表、檔案之後,就可以採取相應措施了。可以更換磁碟裝置,使用更快的SSD磁碟,結合程式讀寫規則,選擇合適的磁碟檔案系統型別,或者從程式本身進行優化。


轉載於:https://blog.51cto.com/zouqingyun/1755311