在 MySQL 中,你可以使用以下方法來查詢未提交的事務(wù):
使用 SHOW PROCESSLIST
命令:
SHOW PROCESSLIST;
這將顯示當(dāng)前所有連接到 MySQL 服務(wù)器的進(jìn)程。你可以查看 Info
列中的事務(wù)信息。如果事務(wù)尚未提交,Info
列可能會顯示類似 “Waiting for table lock” 的信息。
使用 SHOW ENGINE INNODB STATUS
命令:
SHOW ENGINE INNODB STATUS;
這將顯示 InnoDB 存儲引擎的詳細(xì)信息,包括當(dāng)前正在運(yùn)行的事務(wù)。在 “LATEST DETECTED DEADLOCK” 部分,你可以查看是否有未提交的事務(wù)導(dǎo)致死鎖。如果有未提交的事務(wù),你可以查看 Trx_mysql_thread_id
和 Trx_query
列以獲取更多關(guān)于這些事務(wù)的信息。
使用 SELECT ... FOR UPDATE
語句:
SELECT * FROM your_table WHERE some_condition FOR UPDATE;
這個查詢會鎖定滿足條件的行,直到當(dāng)前事務(wù)提交。如果在事務(wù)提交之前執(zhí)行另一個查詢,將會阻塞,直到鎖被釋放。這可以幫助你檢測未提交的事務(wù)。
請注意,這些方法并不能100%保證找到所有未提交的事務(wù),因?yàn)樗鼈冎荒芴峁╆P(guān)于當(dāng)前連接和事務(wù)的信息。然而,它們可以幫助你識別可能導(dǎo)致性能問題或死鎖的未提交事務(wù)。