行锁
-
1.不支持引擎的锁并发只能用表锁,一张表只能有一个更新执行
-
2.行锁是针对表中行记录的锁。
1.两阶段锁
- 1.两阶段锁协议:在inooDB中,行锁在需要的时候加上,不是不需要立即释放,事务结束才释放
2.死锁和死锁检测
-
1.死锁: 并发系统不同线程循环资源依赖,线程都在等待别的线程释放资源时,这几个线程都会进入无限等待的状态
-
2.解决死锁两种策略:
1)进入等待,直到,超时时间通过参数innodb_lock_woit_timeout设置
2)发起死锁检测,发现死锁,主动回滚锁链条中某个事务,让其他事务继续执行,通过参数innodb_deadlock_detect设置成on,表示开启死锁检测 -
3.innoDB 参数innodb_lock_wait_timeout默认时间50s
-
4.死锁检测耗费大量CPU资源 解决方案:
1)控制并发度,限制线程数、对于相同行更新进入引擎前排队
2)一行数据改为多行逻辑