1. 程式人生 > >Mysql通過show processlist排查數據庫執行慢

Mysql通過show processlist排查數據庫執行慢

inno inf slist use img 通過 帶來 pos 接下來

RDS for MySQL使用的是InnoDB引擎。不同於MyISAM引擎只提供表鎖,InnoDB提供不同級別的鎖。但是在我們日常的操作過程中經常由於對數據庫不當的SQL操作導致出現長時間的鎖,造成其他的SQL語句長期等待執行。這種現象對於數據庫的正常使用帶來的極大的阻礙。接下來我們就來介紹如何排查當前實例是否出現該狀態。

首先,用戶可以登錄RDS(通過客戶端、DMS等工具都可),在數據庫中執行命令:

show processlist

執行結果如圖所示:

技術分享圖片

我們首先來講述下各字段的含義:

id,該進程的標識;

user,顯示當前用戶;

host,顯示來源IP和端口;

db,顯示當前連接的數據庫;

command,顯示當前連接的執行的命令,一般就是休眠(sleep),查詢(query),連接(connect);

time,此這個狀態持續的時間,單位是秒;

state列,顯示使用當前連接的sql語句的狀態,很重要的列;

info,顯示這個sql語句,因為長度有限,所以長的sql語句就顯示不全,但是一個判斷問題語句的重要依據。

當如果用戶某個SQL正在query導致別的SQL等待鎖的時候,別的SQL的state狀態會出現”Waiting for table metadata lock“,如果出現這種情況就會導致大量SQL堆積,實例狀態出現異常,因此這個時候就需要用戶去根據前面的id,去kill掉導致其他SQL等待鎖的正在query的語句,然後其他語句即會正常執行。

Mysql通過show processlist排查數據庫執行慢