5、锁
大约 2 分钟数据库原创面试题MySQL程序厨
5.锁
5.0 MyIsam锁和InnoDB锁有什么不同?
MyIsam只支持表锁,一锁就锁住整个表,InnoDB的锁有表级锁和行级锁
5.1 全局锁和表锁
全局锁:
我们通常在不支持事务的搜索引擎使用,我们使用FTWRL,但是我们需要注意的是,我们使用的时候,会让全库处于只读状态,这是非常恐怖的。
表级锁
:指令 lock tables read/wirte 这是表级锁,通过锁住整个表来保证,另一种表级锁是MDL锁,不需要显示使用,他是自动实现的,读锁之间不互斥,读写之间互斥,X锁和R锁
行锁:
因为行锁是在需要的时候才加上
的,commit之后释放所以我们可以调整事务中,对某行的操作顺序,进而调整对操作较频繁的锁的持有时间。
间隙锁:
锁住间隙
推荐阅读:https://zhuanlan.zhihu.com/p/385693319
5.2 死锁和死锁检测
对于有行锁的搜索引擎,我们就有可能出现死锁,因为其是commit之后才会事务才会释放锁。遇到死锁之后,有这样两种情况解决。
1.设置超时时间,如果没有获取到锁的话, 直接放弃(默认是50秒)
2.通过死锁检测,然后进行回滚某个事务。(主动死锁检测默认是开启的)
可以通过deadlock—detect进行检测。但是这样也是有负担的,每个线程都需要进行检测,则就会增大延迟。
