转载 

mysql数据库事务和锁问题分析,三个视图详解 INNODB_LOCKS, INNODB_LOCK_WAITS, INNODB_TRX

分类:Mysql    538人阅读    IT小君  2021-07-14 22:05

INNODB_LOCKS, INNODB_LOCK_WAITS, INNODB_TRX是MYSQL中事务和锁相关的表。通常我们遇到事务超时或锁相关问题时,直接运行下面SQL语句即可进行简单检查:

--查看事务

select * from information_schema.INNODB_TRX;

--查看锁

select * from information_schema.INNODB_LOCKS;

--查看锁等待

select * from information_schema.INNODB_LOCK_WAITS;

 

下面介绍一下各个表。

INNODB_TRX:提供有关当前正在内部执行的每个事务的信息 InnoDB,包括事务是否在等待锁定,事务何时启动以及事务正在执行的SQL语句(如果有)。详见https://dev.mysql.com/doc/refman/5.7/en/innodb-trx-table.html

列名描述
TRX_ID事务Id
TRX_WEIGHT事务的权重,反映(但不一定是确切的计数)更改的行数和事务锁定的行数。要解决死锁,请 InnoDB选择权重最小的事务作为回滚的“ 受害者 ”。无论更改和锁定行的数量如何,已更改非事务表的事务都被认为比其他事务更重。
TRX_STATE事务执行状态。允许值是 RUNNINGLOCK WAIT ROLLING BACK,和 COMMITTING
TRX_STARTED交易开始时间。
TRX_REQUESTED_LOCK_ID事务当前正在等待的锁的ID,如果TRX_STATELOCK WAIT否则NULL
TRX_WAIT_STARTED交易开始等待锁定的时间,如果 TRX_STATELOCK WAIT否则NULL
TRX_MYSQL_THREAD_IDMySQL线程ID,与show processlist中的ID值相对应
TRX_QUERY事务正在执行的SQL语句
TRX_OPERATION_STATE交易的当前操作,如果有的话否则 NULL
TRX_TABLES_IN_USEInnoDB处理此事务的当前SQL语句时使用 的表数。
TRX_TABLES_LOCKEDInnoDB当前SQL语句具有行锁定 的表的数量。(因为这些是行锁,而不是表锁,所以通常仍可以通过多个事务读取和写入表,尽管某些行被锁定。)
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最后一个外键错误的详细错误消息(如果有)否则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 UPDATEor LOCK IN SHARED MODE子句的语句,并且正在执行, autocommit因此事务将仅包含此一个语句。当此列和TRX_IS_READ_ONLY都为1时,InnoDB优化事务以减少与更改表数据的事务关联的开销

 

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

详见https://dev.mysql.com/doc/refman/5.7/en/innodb-locks-table.html

列名描述
LOCK_ID一个唯一的锁ID号,内部为 InnoDB
LOCK_TRX_ID持有锁的交易的ID
LOCK_MODE如何请求锁定。允许锁定模式描述符 SX ISIX GAPAUTO_INC,和 UNKNOWN。锁定模式描述符可以组合使用以识别特定的锁定模式。
LOCK_TYPE锁的类型
LOCK_TABLE已锁定或包含锁定记录的表的名称
LOCK_INDEX索引的名称,如LOCK_TYPE是 RECORD; 否则NULL
LOCK_SPACE锁定记录的表空间ID,如果 LOCK_TYPERECORD否则NULL
LOCK_PAGE锁定记录的页码,如果 LOCK_TYPERECORD否则NULL
LOCK_REC页面内锁定记录的堆号,如果 LOCK_TYPERECORD否则NULL
LOCK_DATA与锁相关的数据(如果有)。如果 LOCK_TYPERECORD,是锁定的记录的主键值,否则NULL。此列包含锁定行中主键列的值,格式为有效的SQL字符串。如果没有主键,LOCK_DATA则是唯一的InnoDB内部行ID号。如果对键值或范围高于索引中的最大值的间隙锁定,则LOCK_DATA 报告supremum pseudo-record。当包含锁定记录的页面不在缓冲池中时(如果在保持锁定时将其分页到磁盘),InnoDB不从磁盘获取页面,以避免不必要的磁盘操作。相反, LOCK_DATA设置为 NULL

 

INNODB_LOCK_WAITS:包含每个被阻止InnoDB 事务的一个或多个行,指示它已请求的锁以及阻止该请求的任何锁。详见https://dev.mysql.com/doc/refman/5.7/en/innodb-lock-waits-table.html

列名描述
REQUESTING_TRX_ID请求(阻止)事务的ID
REQUESTED_LOCK_ID事务正在等待的锁的ID
BLOCKING_TRX_ID阻止事务的ID
BLOCKING_LOCK_ID由阻止另一个事务继续进行的事务所持有的锁的ID

 转载于:https://blog.csdn.net/yuyinghua0302/article/details/82318408

点击广告,支持我们为你提供更好的服务

HTML5数字产品服务公司网站模板

小众时尚单品在线电子商务网站模板

css+js实现的颜色渐变数字时钟动画特效

js+css3抽奖转盘旋转点餐代码

中小型创意设计服务公司网站模板

html5 canvas彩色碎片组合球形旋转动画特效

响应式时尚单品在线商城网站模板

网页设计开发公司网站模板

html5图标下拉搜索框自动匹配代码

响应式太阳能能源公司网站模板

有机水果蔬菜HTML5网站模板

现代时尚家具公司网站模板

jQuery右端悬浮带返回顶部特效

canvas炫酷鼠标移动文字粒子特效

HTML5 Canvas竖直流动线条背景动画特效

css鼠标跟随文字模糊特效

HTML5现代家居装潢公司网站模板

响应式咖啡饮品宣传网站模板

html5 canvas进度条圆环图表统计动画特效

html5 svg夜空中星星流星动画场景特效

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务