MySql語句效能問題定位--從sql語句到磁碟IO檢查
阿新 • • 發佈:2020-10-15
一、背景
本文只針對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;
結論:
從上圖可見CPU耗時不多,反而IO操作佔了大部分的耗時。下面讓我們來找出伺服器的哪些程序在佔用IO資源。
Step2:
檢視伺服器linux IO:
iostat-x1
找出哪些程序在瘋狂的進行IO操作:
iotop
結論:
發現磁碟的讀寫都很高,而且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
總結:
從上圖可以看出,資料庫中,某些表的讀寫操作是造成IO一直很高的主要原因,並嚴重影響了sql的查詢效能。
定位到具體某個表、檔案之後,就可以採取相應措施了。可以更換磁碟裝置,使用更快的SSD磁碟,結合程式讀寫規則,選擇合適的磁碟檔案系統型別,或者從程式本身進行優化。
轉載於:https://blog.51cto.com/zouqingyun/1755311