Mysql数据库系列数据表事务锁处理

Posted 善良勤劳勇敢而又聪明的老杨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql数据库系列数据表事务锁处理相关的知识,希望对你有一定的参考价值。

1、查看是否是操作数据时未设置事务自动提交

可以先看一下事务是否是自动提交的。

show variables like 'autocommit

如图,如果查出来是ON,表明事务是自动提交的,修改数据之后不用自己提交。如果是OFF的话,就需要把自动提交先先打开了。

set autocommit=on;

2、通过查看数据表查询事务信息

通过查询表统计信息查看
information_schema库下相关事务表和锁相关信息表介绍

innodb_trx

存储了当前正在执行的事务信息

trx_id:事务ID。

trx_state:事务状态,有以下几种状态:RUNNING、LOCK WAIT、ROLLING BACK 和 COMMITTING。

trx_started:事务开始时间。

trx_requested_lock_id:事务当前正在等待锁的标识,可以和 INNODB_LOCKS 表 JOIN 以得到更多详细信息。

trx_wait_started:事务开始等待的时间。

trx_mysql_thread_id:事务线程 ID,可以和 PROCESSLIST 表 JOIN。

trx_tables_locked:表示该事务目前加了多少个表级锁。

trx_lock_structs:表示该事务生成了多少个内存中的锁结构。

trx_lock_memory_bytes:事务锁住的内存大小,单位为 BYTES。

trx_rows_locked:表示该事务目前加了多少个行级锁。

innodb_locks

记录了锁信息

如果一个事务想要获取到某个锁但未获取到,则记录该锁信息

如果一个事务获取到了某个锁,但是这个锁阻塞了别的事务,则记录该锁信息

但是无法通过该表查询到谁被阻塞,谁持有未释放。

lock_id:锁 ID。

lock_trx_id:拥有锁的事务 ID。可以和 INNODB_TRX 表 JOIN 得到事务的详细信息。

lock_mode:锁的模式。

lock_type:锁的类型。RECORD 代表行级锁,TABLE 代表表级锁。

lock_table:被锁定的或者包含锁定记录的表的名称。

innodb_lock_waits

表明每个阻塞的事务是因为获取不到哪个事务持有的锁而被阻塞

requesting_trx_id:–获取不到锁而被阻塞的事务id(等待方)

requested_lock_id:-- 请求锁ID ,事务所等待的锁定的 ID。可以和 INNODB_LOCKS 表 JOIN。

blocking_trx_id: --获取到别的事务需要的锁而阻塞其事务的事务id(当前持有方,待释放)

blocking_lock_id: --这一事务的锁的 ID,该事务阻塞了另一事务的运行。可以和 INNODB_LOCKS 表 JOIN。

processlist

id:标识ID。这与在SHOW PROCESSLIST语句的Id列、Performance Schema threads表的PROCESSLIST_ID列中显示的值类型相同,并由CONNECTION_ID()函数返回

user:发出该语句的mysql用户。

host:发出该语句的客户机的主机名(系统用户除外,没有主机)。

db:默认数据库。

command:线程正在执行的命令的类型。

time:线程处于当前状态的时间(以秒为单位)。

state:指示线程正在执行的操作、事件或状态。

info:线程正在执行的语句,如果没有执行任何语句,则为NULL。

如何借助这几张表来定位到有行锁等待

(1)查看当前有无锁等待

mysql> show status like 'innodb_row_lock%';

(2)查看哪个事务在等待(被阻塞了)

mysql> select * from information_schema.INNODB_TRX WHERE trx_state='LOCK WAIT';

trx_state 表示该事务处于锁等待状态。

trx_query : 当前被阻塞的操作是select * from actor where actor_id=1 for update。

从trx_mysql_thread_id和trx_id可以看到这里查到当前被阻塞的事务的。


后续如果有新的内容,还会更新进来~~~

以上是关于Mysql数据库系列数据表事务锁处理的主要内容,如果未能解决你的问题,请参考以下文章

1-2 包子mysql系列, 对mysql的innoDB加锁分析

MySQL-----锁(行锁表锁页锁乐观锁悲观锁)

浅谈MySQL的事务隔离级别

谈谈MySQL的事务隔离级别

MySQL事务锁

Mysql中那些锁机制之InnoDB