MySQL 預設行為

MySQL 預設行為: completion_type=0 (or NO_CHAIN) & Row Exclusive (X) Lock
1. COMMIT 和 ROLLBACK 不被附加在原本 SQL 頭尾
2. BEGIN (or START TRANSACTION): 若沒 COMMIT 又再下一次 BEGIN,則前一次 TRX 會被 AUTOCOMMIT
3. BEGIN 後下 UPDATE 的時候,此時若別人 SELECT,別人不會被 LOCK,會顯示舊的值;若別人是下 UPDATE 影響到該 row,別人會被 LOCK

— 檢查哪個 TRX 正在執行或被 Block
SET @threshold = 0;

SELECT p.user,
LEFT(p.HOST, LOCATE(‘:’, p.HOST) – 1) host, p.id,
TIMESTAMPDIFF(SECOND, t.TRX_STARTED, NOW()) duration,
COUNT(DISTINCT ot.REQUESTING_TRX_ID) waiting
FROM INFORMATION_SCHEMA.INNODB_TRX t
JOIN INFORMATION_SCHEMA.PROCESSLIST p
ON ( p.ID = t.TRX_MYSQL_THREAD_ID )
LEFT JOIN INFORMATION_SCHEMA.INNODB_LOCK_WAITS ot
ON ( ot.BLOCKING_TRX_ID = t.TRX_id )
WHERE t.TRX_STARTED + INTERVAL @threshold SECOND <= NOW()
GROUP BY LEFT(p.HOST, LOCATE(‘:’, p.HOST) – 1), p.id, duration
HAVING duration >= @threshold OR waiting > 0;

資料來源:http://mysqlblog.fivefarmers.com/2012/08/28/identifying-and-killing-blocking-transactions-in-innodb/

廣告
發表留言

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: