我有一个运行在MySQL引擎中的远程InnoDB服务器。在执行特定的select查询操作时,我希望检查innoDB引擎使用的行锁。例如这样的事情:-
SELECT col1,col2 ...
FROM table1 Inner Join table2
ON(table1.foreignkey = table2.primaryKey)
WHERE table1.id=<some_id>; 我在MySQL中读到了有关MySQL表的内容,但是当我执行上面的查询时,然后尝试显示performance_schema.data_locks的内容,例如:-
SELECT
ENGINE_TRANSACTION_ID as trx_id,
OBJECT_NAME as `table`,
INDEX_NAME,
LOCK_DATA,
LOCK_MODE,
LOCK_STATUS
FROM performance_schema.data_locks;上面的查询总是返回一个空集。我已经尝试将autocommit设置为0,但在queryset中仍然没有看到任何内容。
SET autocommit=0
Begin;
SELECT col1,col2 ...
FROM table1 Inner Join table2
ON(table1.foreignkey = table2.primaryKey);
SELECT
ENGINE_TRANSACTION_ID as trx_id,
OBJECT_NAME as `table`,
INDEX_NAME,
LOCK_DATA,
LOCK_MODE,
LOCK_STATUS
FROM performance_schema.data_locks;这个流总是给出空集。尽管performance_schema变量被设置为ON。
我能做些什么来查看InnoDB使用的行锁。提前感谢!
发布于 2022-07-22 00:49:30
data_locks:这个Performance表包含每个持有锁的一行和每个被阻塞的锁请求,等待被持有的锁被释放:对于每个持有的锁都有一行,不管持有锁的事务的状态如何(INNODB_TRX.TRX_STATE正在运行、锁等待、回滚或提交)。InnoDB中等待另一个事务释放锁的每个事务(INNODB_TRX.TRX_STATE是锁等待)都会被一个阻塞锁请求阻塞。该阻塞锁请求用于另一个事务在不兼容模式下持有的行或表锁。锁请求的模式总是与阻止请求的已持有锁的模式不兼容(读与写,共享还是独占)。在其他事务提交或回滚之前,阻止事务无法继续进行,从而释放请求的锁。对于每个阻塞的事务,data_locks包含一行,该行描述事务请求的每个锁,并正在等待这些锁。
https://stackoverflow.com/questions/73073657
复制相似问题