<1> 两阶段锁
两阶段锁是指在同一个事务内,对所涉及的所有数据项进行先加锁(第一阶段),然后才对所有的数据项解锁(第二阶段)。
其中,在第一阶段加共享锁后影响了其他事务的写操作、加排它锁后影响了其他事务的读操作(此时,读写都受影响),所以较大地
影响了其他事务的运行(如果不操作相同数据项则互不影响)。只有在第二阶段释放了所有的数据项上的锁之后,才能运行其他要操
作相同数据项的事务。也就是说,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放, 而是要等到事务结束时才释放。
【建议】
如果事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放,这样可以减少事务持有锁的时间。
<2> 死锁
当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状
态。
数据库默认会发起死锁检测(innodb detect),发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行,其
优先级最高。
参数 innodb_deadlock_detect =on,表示开启死锁检测(默认是开启状态)
--查看
root@localhost: 15:06: [test]> show variables like "%innodb_deadlock%";
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| innodb_deadlock_detect | ON |
+------------------------+-------+
1 row in set (0.00 sec)
文档被以下合辑收录
相关文档
评论