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?