InnoDB INFORMATION_SCHEMA Lock Tables

三张InnoDB INFORMATION_SCHEMA表使您能够监视事务并诊断潜在的锁定问题:

  • INNODB_TRX:提供有关InnoDB中当前正在执行的每个事务的信息,包括事务状态(例如,它是否正在运行或等待锁定),事务何时启动以及事务正在执行的特定SQL语句。

  • INNODB_LOCKS:InnoDB中等待另一个事务释放锁定(INNODB_TRX.TRX_STATELOCK WAIT)的每个事务都被一个阻塞锁定请求阻止。阻塞锁定请求是针对由不兼容模式中的另一个事务持有的行或表锁定。阻止事务的锁始终处于与请求锁定模式不兼容的模式(读取与写入,共享与排除)。在另一个事务提交或回滚之前,阻塞的事务无法继续,从而释放所请求的锁。对于每个被阻止的事务,INNODB_LOCKS包含一行描述事务已请求的每个锁,以及它正在等待的每个锁。对于阻止另一个事务的每个锁,INNODB_LOCKS也包含一行,无论持有锁的事务的状态如何(INNODB_TRX.TRX_STATERUNNINGLOCK WAITROLLING BACKCOMMITTING)。

  • INNODB_LOCK_WAITS:此表指示哪些事务正在等待给定锁定,或者指定给定事务正在等待哪个锁定。此表包含每个被阻止事务的一个或多个行,指示它已请求的锁以及阻止该请求的任何锁。 REQUESTED_LOCK_ID值指的是事务请求的锁,BLOCKING_LOCK_ID值指的是阻止第一个事务继续进行的锁(由另一个事务持有)。对于任何给定的阻塞事务,INNODB_LOCK_WAITS中的所有行都具有REQUESTED_LOCK_ID的相同值和BLOCKING_LOCK_ID的不同值。

13. INNODB_LOCKS

INNODB_LOCKS表包含有关InnoDB事务已请求但尚未获取的每个锁的信息,以及事务持有的阻止另一个事务的每个锁。

【注意】

此表从MySQL 5.7.14开始不推荐使用,并在MySQL 8.0中删除。

INNODB_LOCKS表包含以下列:

  • lock_id :InnoDB内部的唯一锁ID号。将其视为不透明的字符串。虽然LOCK_ID当前包含TRX_ID,但LOCK_ID中的数据格式可能随时更改。不要编写解析LOCK_ID值的应用程序。
  • lock_trx_id:持有锁的交易的ID。要获取有关事务的详细信息,请将此列与INNODB_TRX表的TRX_ID列连接。
  • lock_mode :如何请求锁定。 允许的锁定模式描述符是S,X,IS,IX,GAP,AUTO_INC和UNKNOWN。 锁定模式描述符可以组合使用以识别特定的锁定模式。 有关InnoDB锁定模式的信息,请参见“InnoDB锁定”。
  • lock_type :锁的类型。允许的值是行级锁定的RECORD,表级锁定的TABLE。
  • lock_table :已锁定或包含锁定记录的表的名称。
  • lock_index :索引的名称,如果LOCK_TYPE是RECORD;否则为NULL。
  • lock_space :锁定记录的表空间ID,如果LOCK_TYPE是RECORD;否则为NULL。
  • lock_page :锁定记录的页码,如果LOCK_TYPE是RECORD;否则为NULL。
  • lock_rec :如果LOCK_TYPE是RECORD,则页面内锁定记录的堆号;否则为NULL。
  • lock_data :与锁相关的数据(如果有)。 如果LOCK_TYPE是RECORD,则值是锁定记录的主键值,否则为NULL。 此列包含锁定行中主键列的值,格式为有效的SQL字符串(准备复制到SQL语句)。 如果没有主键,则LOCK_DATA是唯一的InnoDB内部行ID号。 如果对索引中的最大值的键值或范围进行间隙锁定,则LOCK_DATA将报告supremum伪记录。 当包含锁定记录的页面不在缓冲池中时(如果在保持锁定时它被分页到磁盘),InnoDB不会从磁盘获取页面,以避免不必要的磁盘操作。 相反,LOCK_DATA设置为NULL。

示例

  1. mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS\G
  2. *************************** 1. row ***************************
  3. lock_id: 3723:72:3:2
  4. lock_trx_id: 3723
  5. lock_mode: X
  6. lock_type: RECORD
  7. lock_table: `mysql`.`t`
  8. lock_index: PRIMARY
  9. lock_space: 72
  10. lock_page: 3
  11. lock_rec: 2
  12. lock_data: 1, 9
  13. *************************** 2. row ***************************
  14. lock_id: 3722:72:3:2
  15. lock_trx_id: 3722
  16. lock_mode: S
  17. lock_type: RECORD
  18. lock_table: `mysql`.`t`
  19. lock_index: PRIMARY
  20. lock_space: 72
  21. lock_page: 3
  22. lock_rec: 2
  23. lock_data: 1, 9

Notes

  • 使用此表可帮助诊断在并发负载较重时发生的性能问题。 其内容按“InnoDB事务和锁定信息的持久性和一致性”中所述进行更新。

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

  • 有关使用信息,请参见“使用InnoDB事务和锁定信息”。

14. INNODB_LOCK_WAITS

INNODB_LOCK_WAITS表包含每个被阻止的InnoDB事务的一行或多行,指示它已请求的锁以及阻止该请求的任何锁。

【注意】

此表从MySQL 5.7.14开始不推荐使用,并在MySQL 8.0中删除。

INNODB_LOCK_WAITS表包含以下列:

  • requesting_trx_id:请求(阻止)事务的ID。
  • requested_lock_id:事务正在等待的锁的ID。要获取有关锁的详细信息,请使用INNODB_LOCKS表的LOCK_ID列连接此列。
  • blocking_trx_id :阻止事务的ID。
  • blocking_lock_id :由阻止另一个事务继续进行的事务所持有的锁的ID。要获取有关锁的详细信息,请使用INNODB_LOCKS表的LOCK_ID列连接此列。

示例

  1. mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS\G
  2. *************************** 1. row ***************************
  3. requesting_trx_id: 3396
  4. requested_lock_id: 3396:91:3:2
  5. blocking_trx_id: 3395
  6. blocking_lock_id: 3395:91:3:2

Notes

  • 使用此表可帮助诊断在并发负载较重时发生的性能问题。 其内容按“InnoDB事务和锁定信息的持久性和一致性”中所述进行更新。

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

  • 有关使用信息,请参见“使用InnoDB事务和锁定信息”。

27. INNODB_TRX

INNODB_TRX表包含有关当前在InnoDB内执行的每个事务(不包括只读事务)的信息,包括事务是否在等待锁定,事务何时启动以及事务正在执行的SQL语句(如果有)。

INNODB_TRX表包含以下列:

  • trx_id :InnoDB内部的唯一交易ID号。不会为只读和非锁定的事务创建这些ID。有关详细信息,“优化InnoDB只读事务”。
  • trx_state :事务执行状态。允许的值为RUNNING,LOCK WAIT,ROLLING BACK和COMMITTING。
  • trx_started :实务开始时间
  • trx_requested_lock_id :如果TRX_STATE是LOCK WAIT,则事务当前正在等待的锁的ID;否则为NULL。要获取有关锁的详细信息,请使用INNODB_LOCKS表的LOCK_ID列连接此列。
  • trx_wait_started :如果TRX_STATE是LOCK WAIT,则事务开始等待锁定的时间;否则为NULL。
  • trx_weight :事务的权重,反映(但不一定是确切的计数)更改的行数和事务锁定的行数。 为了解决死锁,InnoDB选择具有最小权重的事务作为回滚的“受害者”。 无论更改和锁定行的数量如何,已更改非事务表的事务都被认为比其他事务更重。
  • trx_mysql_thread_id :MySQL线程ID。 要获取有关线程的详细信息,请将此列与INFORMATION_SCHEMA PROCESSLIST表的ID列连接,但请参见“InnoDB事务和锁定信息的持久性和一致性”。
  • trx_query :事务正在执行的SQL语句。
  • trx_operation_state :交易的当前操作,如果有的话;否则为NULL。
  • trx_tables_in_use :处理此事务的当前SQL语句时使用的InnoDB表的数量。
  • trx_tables_locked :当前SQL语句具有行锁的InnoDB表的数量。 (因为这些是行锁,而不是表锁,所以通常仍可以通过多个事务读取和写入表,尽管某些行被锁定。)
  • trx_lock_structs :事务保留的锁数。
  • trx_lock_memory_bytes :内存中此事务的锁结构占用的总大小。
  • trx_rows_locked :此交易锁定的大致数字或行数。该值可能包括实际存在但对事务不可见的删除标记行。
  • trx_rows_modified :此事务中已修改和插入的行数。
  • trx_concurrency_tickets :一个值,指示当前事务在被换出之前可以执行多少工作,由innodb_concurrency_tickets系统变量指定。
  • trx_isolation_level :当前事务的隔离级别。
  • trx_unique_checks :是否为当前事务打开或关闭唯一检查。例如,在批量数据加载期间可能会关闭它们。
  • trx_foreign_key_checks :是否为当前事务打开或关闭外键检查。例如,在批量数据加载期间可能会关闭它们。
  • trx_last_foreign_key_error:最后一个外键错误的详细错误消息(如果有);否则为NULL。
  • trx_adaptive_hash_latched :自适应哈希索引是否被当前事务锁定。 当自适应哈希索引搜索系统被分区时,单个事务不会锁定整个自适应哈希索引。 自适应哈希索引分区由innodb_adaptive_hash_index_parts控制,默认设置为8。
  • trx_adaptive_hash_timeout :是否立即为自适应哈希索引放弃搜索锁存器,或者在MySQL的调用之间保留它。 当没有自适应哈希索引争用时,该值保持为零,语句保留锁存器直到它们完成。 在争用期间,它倒计时到零,并且语句在每次行查找后立即释放锁存器。 当自适应哈希索引搜索系统被分区时(由innodb_adaptive_hash_index_parts控制),该值保持为0。
  • trx_is_read_only :值为1表示事务是只读的。
  • trx_autocommit_non_locking:值为1表示事务是一个SELECT语句,它不使用FOR UPDATE或LOCK IN SHARED MODE子句,并且在启用自动提交的情况下执行,因此事务将只包含这一个语句。 当此列和TRX_IS_READ_ONLY都为1时,InnoDB会优化事务以减少与更改表数据的事务相关的开销。

示例

  1. mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G
  2. *************************** 1. row ***************************
  3. trx_id: 1510
  4. trx_state: RUNNING
  5. trx_started: 2014-11-19 13:24:40
  6. trx_requested_lock_id: NULL
  7. trx_wait_started: NULL
  8. trx_weight: 586739
  9. trx_mysql_thread_id: 2
  10. trx_query: DELETE FROM employees.salaries WHERE salary > 65000
  11. trx_operation_state: updating or deleting
  12. trx_tables_in_use: 1
  13. trx_tables_locked: 1
  14. trx_lock_structs: 3003
  15. trx_lock_memory_bytes: 450768
  16. trx_rows_locked: 1407513
  17. trx_rows_modified: 583736
  18. trx_concurrency_tickets: 0
  19. trx_isolation_level: REPEATABLE READ
  20. trx_unique_checks: 1
  21. trx_foreign_key_checks: 1
  22. trx_last_foreign_key_error: NULL
  23. trx_adaptive_hash_latched: 0
  24. trx_adaptive_hash_timeout: 10000
  25. trx_is_read_only: 0
  26. trx_autocommit_non_locking: 0

Notes

  • 使用此表可帮助诊断在并发负载较重时发生的性能问题。 其内容按“InnoDB事务和锁定信息的持久性和一致性”中所述进行更新。

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

  • 有关使用信息,请参见“使用InnoDB事务和锁定信息”。

InnoDB INFORMATION_SCHEMA Lock Tables的更多相关文章

  1. InnoDB INFORMATION_SCHEMA System Tables

    InnoDB INFORMATION_SCHEMA System Tables 可以使用InnoDB INFORMATION_SCHEMA系统表提取有关InnoDB管理的schema对象的元数据. 此 ...

  2. InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables

    InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables 下表提供了FULLTEXT索引的元数据: mysql> SHOW TABLES FROM INFO ...

  3. InnoDB INFORMATION_SCHEMA Tables about Compression

    InnoDB INFORMATION_SCHEMA Tables about Compression 了解关于压缩的InnoDB INFORMATION_SCHEMA表,可以深入了解压缩的整体运行情况 ...

  4. InnoDB INFORMATION_SCHEMA Buffer Pool Tables

    InnoDB INFORMATION_SCHEMA Buffer Pool Tables InnoDB INFORMATION_SCHEMA缓冲池表提供有关InnoDB缓冲池中页面的缓冲池状态信息和元 ...

  5. LOCK TABLES

    http://blog.csdn.net/zyz511919766/article/details/16342003 http://blog.csdn.net/zyz511919766/article ...

  6. 14.3.5 LOCK TABLES and UNLOCK TABLES Syntax

    14.3.5 LOCK TABLES and UNLOCK TABLES Syntax LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name ...

  7. MySQL LOCK TABLES 与UNLOCK TABLES

    http://blog.csdn.net/zyz511919766/article/details/16342003 1语法 LOCK TABLES tbl_name[[AS] alias] lock ...

  8. LOCK TABLES和UNLOCK TABLES与Transactions的交互

    LOCK TABLES对事务不安全,并且在试图锁定表之前隐式提交任何活动事务. UNLOCK TABLES只有在LOCK TABLES已经获取到表锁时,会隐式提交任何活动事务.对于下面的一组语句,UN ...

  9. faster with MyISAM tables than with InnoDB or NDB tables

    http://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations.html Performance considerations.  So ...

随机推荐

  1. python 元类 type metaclass

    python中一切皆对象,类对象创建实例对象,元类创建类对象,元类创建元类. 元类创建类对象有2中方式: 一.type方法 type(类名, 由父类名称组成的元组(针对继承的情况,可以为空),包含属性 ...

  2. 二分图最大匹配初探 By cellur925

    一.什么是二分图 首先它需要是一张无向图. 之后它需要同时满足两个条件:①它的N个点被分为两个集合,且这两个集合交集为空:②同一集合内的点之间没有边相连. 二.无向图是否为二分图的判定 引理:无向图是 ...

  3. Jenkins自动化部署——持续交付

    感谢之前带领过我的leader,让我能够知道什么是好的开发方法. 在很早之前就接触过敏捷开发.什么是敏捷开发,简单来说就是让软件可靠地,快速地发布出来的一种开发方法和技巧. 而敏捷开发中有许多的实践, ...

  4. Qt基本应用

    1 使用方式 在qt designer中直接设计图形界面,然后使用pyGUI转换成py文件. 可以发现,转换的文件为一个class.并不是一个完整的程序(运行时无法出现窗口).这个类名字是Ui_Mai ...

  5. Chemistry in Berland CodeForces - 846E

    题目 题意: 有n种化学物质,第i种物质现有bi千克,需要ai千克.有n-1种,编号为2-n的转换方式,每种都为(x,k),第i行是编号为i+1的转换方式,编号为i的转换方式(xi,ki)表示ki千克 ...

  6. h5-23-百度地图api

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  7. asp.net 微信登录实现方式

    之前我以为做微信登录跟微信公众号有关,后来发现是我想多了.原来微信还有一个叫开放平台的东西,见下图: 我的这个已经生成好了,没有的需要创建一个,https://open.weixin.qq.com/c ...

  8. 浅议block实现原理,block为什么使用copy关键字?

    1.block是一个特殊的oc对象,建立在栈上,而不是堆上,这么做一个是为性能考虑,还有就是方便访问局部变量. 2.默认Block使用到的局部变量会被copy,而不是retain.所以,他无法改变局部 ...

  9. hihocoder1079 离散化

    思路:线段树 + 离散化. 测试用例: 3 10 1 10 1 3 6 10 实现: #include <bits/stdc++.h> using namespace std; typed ...

  10. phpstorm设置代码块快捷方式

    File -> Settings -> Live Templates