数据库mysql阻塞与死锁


数据库mysql阻塞与死锁

        

                 

                             

阻塞与死锁

        

阻塞:一个事务等待其他事务释放锁,阻塞超时事务默认不回滚

死锁:两个或以上事务持有锁,都在等待其他事务先释放锁,发生死锁事务会回滚

            

查看锁超时时间(InnoDb锁等待的超时时间默认为50s

                  

           

锁回滚超时开关

                  

说明:事务获取锁超时默认不会回滚,可设置为on回滚事务

        

               

                             

阻塞测试

          

数据库数据        

                  

         

事务操作

事务1事务2
T1select * from test where id>15 for update;
T2

insert into test values(11,"瓜田李下11",21);
T3insert into test values(21,"瓜田李下21",21);

         

事务1执行状态

start transaction
> OK
> 时间: 0s


select sleep(4)
> OK
> 时间: 4s


select * from test where id>15 for update
> Affected rows: 0
> 时间: 0.001s


select sleep(80)
> OK
> 时间: 80s


commit
> OK
> 时间: 0s

         

事务2执行状态

start transaction
> OK
> 时间: 0s


select sleep(4)
> OK
> 时间: 4s


insert into test values(11,"瓜田李下11",21)
> Affected rows: 1
> 时间: 0.018s


insert into test values(21,"瓜田李下21",21)
> 1205 - Lock wait timeout exceeded; try restarting transaction
> 时间: 50.546s

说明:id为11的数据插入成功,id为21的数据超时未插入

        

                

                             

死锁测试

       

事务操作

事务1事务2
T1update test set age=11 where id=1;
T2update test set age=22 where id=2;
T3update test set age=12 where id=2;
T4update test set age=21 where id=1;

      

事务1执行状态

start transaction
> OK
> 时间: 0s


select sleep(4)
> OK
> 时间: 4.001s


update test set age=11 where id=1
> Affected rows: 1
> 时间: 0.14s


select sleep(8)
> OK
> 时间: 8.001s


update test set age=12 where id=2
> Affected rows: 1
> 时间: 1.526s


commit
> OK
> 时间: 0.168s

         

事务2执行状态

start transaction
> OK
> 时间: 0s


select sleep(4)
> OK
> 时间: 4.001s


update test set age=22 where id=2
> Affected rows: 1
> 时间: 0.002s


select sleep(8)
> OK
> 时间: 8.002s


update test set age=21 where id=1
> 1213 - Deadlock found when trying to get lock; try restarting transaction
> 时间: 0.17s

说明:事务2检测到死锁回滚,事务1在事务2回滚释放锁后继续执行

     

                 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值