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;
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