mysql事务表,锁,锁等待

1,测试

1)创建测试数据
创建库:create database testdb default character set utf8mb4;
创建表:create table test_tx(id int primary key, name varchar(20), pwd varchar(30)) engine=innodb default charset = utf8mb4;
创建索引:alter table test_tx add index idx_name(name);
插入数据:insert into test_tx values(1,"hzq","123"),(2,"hh","11"),(3,"zq","22");

image.png

2)开启两个session。
image.png

查看事务表信息 select trx_mysql_thread_id,trx_id,trx_started,trx_wait_started,trx_requested_lock_id,trx_query,trx_rows_locked,trx_rows_modified from information_schema.innodb_trx;
image.png
查看mysql线程信息
image.png

开启Session2,模拟 产生锁等待,session 1一直不commit,最后会锁等待超时
image.png

查看事务表,锁信息,锁等待信息。
image.png
image.png

3)简单说明
只要产生事务,在 innodb_trx 就有数据
如果没有产生锁等待,在innodb_locks和innodb_lock_waits无数据
事务由哪个mysql线程执行,information_schema.innodb_trx中trx_mysql_thread_id 是show processlist中mysql线程的id
锁住的是哪个事务information_schema.innodb_locks中lock_trx_id是innodb_trx中事务的trx_id
请求锁和持有锁的事务information_schema.innodb_lock_waits中requesting_trx_id是请求锁的事务id,blocking_trx_id是持有锁的事务id

2,information_schema中innodb_trx,innodb_locks,innodb_lock_waits表说明

1)事务表。innodb_trx

image.png

trx_started 事务开始时间
trx_wait_started 事务开始等待的时间
trx_requested_lock_id 事务请求的锁id,innodb_locks.lock_id
image.png

mysql行锁基于索引,当检索条件中使用了索引时,使用行锁,否则使用表级锁。
2)锁信息表。
image.png
image.png

3)锁等待信息表
image.png

image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容