1. 查詢鎖定狀態(tài)
在MySQL中,可以通過(guò)以下命令查詢當(dāng)前正在鎖定的事務(wù):
SHOW ENGINE INNODB STATUS\G
執(zhí)行該命令后,會(huì)輸出一些信息,其中包含了當(dāng)前正在鎖定的事務(wù)。在輸出的信息中,可以找到以下內(nèi)容:
------------------------
LATEST DETECTED DEADLOCK
------------------------
在該段信息下方,會(huì)列出當(dāng)前正在鎖定的事務(wù)。例如:
------------------------
TRANSACTIONS
------------------------ter 0 3686edo:o< 0 0gth 5umber row lock hash table 0
LIST OF TRANSACTIONS FOR EACH SESSION:oto 1775, OS thread id 140735065320704
MySQL thread id 3, query id 54 localhost root
SHOW ENGINE INNODB STATUSogdex readysql use 1, locked 1dotries 1g
UPDATE test SET value=2 WHERE id=1
------- TRX HAS BEEN WAITING 7 SEC FOR THIS LOCK TO BE GRANTED:odexodeotgopactatfo bits 0 8; hex 8000000000000001; asc ;; 4; hex 80000001; asc ;;
在該段信息中,可以看到當(dāng)前正在鎖定的事務(wù)的詳細(xì)信息。例如,在上面的信息中,可以看到當(dāng)前正在執(zhí)行的事務(wù)的ID為0 3685,該事務(wù)正在等待鎖定一條記錄。
2. 查詢鎖定表
還可以通過(guò)以下命令查詢當(dāng)前正在被鎖定的表:
```formationa.INNODB_LOCKS;
執(zhí)行該命令后,會(huì)輸出當(dāng)前正在被鎖定的表的詳細(xì)信息。例如:
+------------------------+-------------+-----------+-----------+---------------------+---------------------+-------------+----------------------+----------------------+----------------------+----------------------+odedexe
+------------------------+-------------+-----------+-----------+---------------------+---------------------+-------------+----------------------+----------------------+----------------------+----------------------+
858:4:3:2 | 858 | X | RECORD | `test`.`test` | PRIMARY | 4 | 241 | 2 | 8000000000000001 | 2021-10-22 11:36:44
+------------------------+-------------+-----------+-----------+---------------------+---------------------+-------------+----------------------+----------------------+----------------------+----------------------+
在該段信息中,可以看到當(dāng)前正在被鎖定的表的詳細(xì)信息,包括鎖定的類型、鎖定的時(shí)間等。
通過(guò)以上兩種方法,可以查詢MySQL中正在被鎖定的事務(wù)和表的詳細(xì)信息,方便進(jìn)行調(diào)試和優(yōu)化。