10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 42.0 mb
PDF (A4)- 42.1 mb
手册页(TGZ)- 267.2 kb
手册页(邮政编码)- 376.9 kb
信息(Gzip)- 4.1 mb
信息(邮政编码)- 4.1 mb
本手册节选

27.12.13.1 data_locks表

data_locks表显示所持有和请求的数据锁。有关哪些锁请求被持有的锁阻塞的信息,请参见第27.12.13.2节“data_lock_waittable”

数据锁信息示例:

SELECT * FROM performance_schema。data_locks\G *************************** 1. row *************************** ENGINE: INNODB ENGINE_LOCK_ID: 139664434886512:1059:139664350547912 ENGINE_TRANSACTION_ID: 2569 THREAD_ID: 46 EVENT_ID: 12 OBJECT_SCHEMA: test OBJECT_NAME: t1 PARTITION_NAME: NULL SUBPARTITION_NAME: NULL INDEX_NAME: NULL OBJECT_INSTANCE_BEGIN: 139664350547912 LOCK_TYPE: TABLE LOCK_MODE: IX LOCK_STATUS: GRANTED LOCK_DATA: NULL *************************** 2. row *************************** ENGINE: INNODB ENGINE_LOCK_ID: 139664434886512:2:4:1:139664350544872 ENGINE_TRANSACTION_ID: 2569 THREAD_ID: 46 EVENT_ID: 12 OBJECT_SCHEMA: test OBJECT_NAME: t1 PARTITION_NAME: NULL SUBPARTITION_NAME: NULL INDEX_NAME: GEN_CLUST_INDEX OBJECT_INSTANCE_BEGIN: 139664350544872 LOCK_TYPE: RECORD LOCK_MODE: X LOCK_STATUS: GRANTED LOCK_DATA: supremum pseudo-record

与大多数Performance Schema数据收集不同,没有控制是否收集数据锁信息的工具,也没有控制数据锁表大小的系统变量。Performance Schema收集服务器中已经存在的信息,因此不存在生成这些信息的内存或CPU开销,也不需要控制其收集的参数。

使用data_locks表,以帮助诊断并发负载高时发生的性能问题。为InnoDB,参见关于此主题的讨论第15.15.2节“InnoDB的事务和锁定信息”

data_locks表有这些列:

  • 引擎

    持有或请求锁的存储引擎。

  • ENGINE_LOCK_ID

    存储引擎持有或请求的锁的ID。元组(ENGINE_LOCK_ID引擎)值是唯一的。

    锁ID格式是内部的,随时可能更改。应用程序不应该依赖具有特定格式的锁id。

  • ENGINE_TRANSACTION_ID

    请求锁的事务的存储引擎内部ID。这可以被认为是锁的所有者,尽管锁可能仍然是挂起的,实际上还没有授予(LOCK_STATUS = '等待').

    如果事务还没有执行任何写操作(仍然被认为是只读的),则列包含用户不应该尝试解释的内部数据。否则,该列就是事务ID。

    InnoDB,以获取有关事务的详细信息,请将此列与TRX_ID列的INFORMATION_SCHEMAINNODB_TRX表格

  • THREAD_ID

    创建锁的会话的线程ID。要获取关于线程的详细信息,请将此列与THREAD_ID的“性能架构”列线程表格

    THREAD_ID可以和?一起用吗EVENT_ID确定在内存中创建锁数据结构的事件。(如果数据结构用于存储多个锁,则此事件可能在此特定锁请求发生之前发生。)

  • EVENT_ID

    导致锁定的性能架构事件。元组(THREAD_IDEVENT_ID)值隐式识别其他性能模式表中的父事件:

    • 中的父等待事件events_waits_xxx

    • 中的父阶段事件events_stages_xxx

    • 中的父语句事件events_statements_xxx

    • 控件中的父事务事件events_transactions_current表格

    如需获取父事件的详细信息,请加入THREAD_ID而且EVENT_ID适当的父事件表中具有相同名称的列。看到第27.19.2节“获取父事件信息”

  • OBJECT_SCHEMA

    包含锁定表的模式。

  • OBJECT_NAME

    锁定表的名称。

  • PARTITION_NAME

    锁定分区的名称(如果有的话);否则。

  • SUBPARTITION_NAME

    锁定子分区的名称,如果有的话;否则。

  • INDEX_NAME

    锁定索引的名称(如果有的话);否则。

    在实践中,InnoDB总是创建索引(GEN_CLUST_INDEX),所以INDEX_NAME是不InnoDB表。

  • OBJECT_INSTANCE_BEGIN

    锁在内存中的地址。

  • LOCK_TYPE

    锁的类型。

    取值与存储引擎相关。为InnoDB,允许值为记录对于行级锁,表格对于表级锁。

  • LOCK_MODE

    如何请求锁。

    取值与存储引擎相关。为InnoDB,允许值为S(差距)X(差距)(差距)第九(差距)AUTO_INC,未知的.非锁定模式AUTO_INC而且未知的如果有间隙锁,指示间隙锁。和有关信息。年代X9,和间隙锁,参考第15.7.1节“InnoDB锁定”

  • LOCK_STATUS

    锁请求的状态。

    取值与存储引擎相关。为InnoDB,允许值为授予(锁被持有)和等待(正在等锁)。

  • LOCK_DATA

    与锁相关的数据(如果有的话)。取值与存储引擎相关。为InnoDB,则显示一个值LOCK_TYPE记录,否则为.对于放在主键索引上的锁,显示锁定记录的主键值。锁定记录的二级索引值显示为附加在二级索引上的锁的主键值。如果没有主键,LOCK_DATA显示所选惟一索引或惟一索引的键值InnoDB内部行ID号,根据所控制的规则InnoDB聚集索引的使用(参见第15.6.2.1节“群集索引和二级索引”).LOCK_DATA报告上确界pseudo-record用于在最高伪记录上获取的锁。如果包含锁定记录的页面不在缓冲池中,因为它是在持有锁时写入磁盘的,InnoDB不从磁盘取页。相反,LOCK_DATA报告

data_locks表有以下索引:

  • 主键(ENGINE_LOCK_ID引擎

  • 指数(ENGINE_TRANSACTION_ID引擎

  • 指数(THREAD_IDEVENT_ID

  • 指数(OBJECT_SCHEMAOBJECT_NAMEPARTITION_NAMESUBPARTITION_NAME

截断表是不允许的data_locks表格

请注意

在MySQL 8.0.1之前,与性能模式中的信息类似data_locks表可在INFORMATION_SCHEMA。INNODB_LOCKS表,该表提供了关于每个锁的信息InnoDB事务已请求但尚未获得,以及正在阻塞另一个事务的事务所持有的每个锁。INFORMATION_SCHEMA。INNODB_LOCKS已弃用,从MySQL 8.0.1起移除。data_locks应该使用。

之间的差异INNODB_LOCKS而且data_locks

  • 如果一个事务持有一个锁,INNODB_LOCKS只有在另一个事务正在等待它时才显示锁。data_locks显示锁,而不管是否有事务在等待它。

  • data_locks表中没有对应的列LOCK_SPACELOCK_PAGE,或LOCK_REC

  • INNODB_LOCKS表需要全局的过程特权。的data_locks表需要通常的性能模式特权选择在要选择的桌子上。

下表显示了从INNODB_LOCKSdata_locks列。使用这些信息将应用程序从一个表迁移到另一个表。

表27.4从INNODB_LOCKS到data_locks列的映射

INNODB_LOCKS列 data_locks列
LOCK_ID ENGINE_LOCK_ID
LOCK_TRX_ID ENGINE_TRANSACTION_ID
LOCK_MODE LOCK_MODE
LOCK_TYPE LOCK_TYPE
LOCK_TABLE(结合模式/表名) OBJECT_SCHEMA(模式名称),OBJECT_NAME(表名)
LOCK_INDEX INDEX_NAME
LOCK_SPACE 没有一个
LOCK_PAGE 没有一个
LOCK_REC 没有一个
LOCK_DATA LOCK_DATA