16.12 MySQL锁等待

1 锁等待模拟

创建数据库

create database clay_test default charset utf8 collate utf8_general_ci;
use clay_test

创建表

create table t1(id int, name varchar(20)) engine=innodb default charset=utf8;

插入数据

insert into t1 values(1, 'clay');

取消自动提交

则当执行语句commit或者rollback执行提交事务或者回滚

set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

更新第一条插入的数据

新开一个终端,也更新第一条数据

2 监控锁状态

2.1 查看有无锁等待

  • Innodb_row_lock_current_waits 表示当前所等待的数量

  • Innodb_row_lock_waits 表示历史发生锁等待的数量

查看哪个表的打开数量大于0

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

2.3 查看索源

2.4 找到锁源的SQL语句

3 杀掉进程

线程ID(trx_mysql_thread_id)

Last updated

Was this helpful?