这三条 SQL 语句用于查询 MySQL 数据库中的锁和事务信息。下面是对每条语句的解释:
- 查看当前的锁
SELECT * FROM information_schema.INNODB_LOCKS;
这条语句查询 INNODB_LOCKS
表,该表提供了当前被持有的所有锁的信息。返回的结果集包含了以下字段:
-
lock_id
:锁的唯一标识符。 -
lock_trx_id
:持有该锁的事务的 ID。 -
lock_mode
:锁的模式(例如,S 表示共享锁,X 表示排它锁)。 -
lock_type
:锁的类型(例如,RECCORD 表示记录锁,TABLE 表示表锁)。 -
lock_table
:被锁定的表的名称。 -
lock_index
:被锁定的索引的名称(如果有)。 -
lock_space
:被锁定的空间的 ID(对于表锁,这通常是 0)。 -
lock_page
:被锁定的页码(对于行锁,这通常是 0)。 -
lock_rec
:被锁定的记录号(对于行锁)。 -
lock_data
:被锁定的数据(对于行锁,这通常是记录的内容)。
- 查看锁等待
SELECT * FROM information_schema.INNODB_LOCK_WAITS;
这条语句查询 INNODB_LOCK_WAITS
表,该表提供了锁等待关系的信息。返回的结果集包含了两个主要的字段:
-
requesting_trx_id
:正在等待锁的事务的 ID。 -
requested_lock_id
:事务正在等待的锁的 ID。
这个表通常与INNODB_LOCKS
表联合查询,以找出哪些事务正在等待哪些锁。由于INNODB_LOCK_WAITS
表中的记录相对较少,因此这个查询通常返回的结果集也较小。
- 查看当前的事务
SELECT * FROM information_schema.INNODB_TRX;
这条语句查询 INNODB_TRX
表,该表提供了当前活跃的事务的信息。返回的结果集包含了以下字段:
-
trx_id
:事务的唯一标识符。 -
trx_state
:事务的状态(例如,RUNNING、LOCK WAIT、SLEEPING)。 -
trx_started
:事务开始的时间。 -
trx_requested_lock_id
:事务正在请求的锁的 ID(如果有)。 -
trx_wait_started
:事务开始等待锁的时间(如果有)。 -
trx_weight
:事务的权重,表示事务执行的工作量。 -
trx_mysql_thread_id
:与事务关联的 MySQL 线程的 ID。 -
trx_query
:事务正在执行的 SQL 查询(如果有)。 -
trx_operation_state
:事务当前操作的状态。 -
trx_tables_in_use
:事务正在使用的表的数量。 -
trx_tables_locked
:事务锁定的表的数量。 -
trx_lock_structs
:事务持有的锁结构的数量。 -
trx_lock_memory_bytes
:事务使用的锁内存的大小。 -
trx_rows_locked
:事务锁定的行的数量。 -
trx_rows_modified
:事务修改的行的数量。 -
trx_concurrency_tickets
:事务持有的并发票证的数量。 -
trx_isolation_level
:事务的隔离级别。 -
trx_unique_checks
:事务执行的唯一性检查。 -
trx_foreign_key_checks
:事务执行的外键检查。 -
trx_last_foreign_key_error
:事务遇到的最后一次外键错误。 -
trx_started
:事务开始的时间戳。 -
trx_requested_lock_id
:事务请求的锁的 ID。 -
trx_wait_started
:事务等待锁开始的时间戳。