MyISAM存储引擎使用的表级锁定有什么好处?行级锁定有许多好处,例如并发更新和不锁定表的读取.
编辑
它被广泛认为是表级锁定可以防止死锁.但是如何以并发为代价来防止死锁是值得的?
解决方法:
MyISAM没有死锁,但在某种程度上死锁,是对表级锁定的改进.
当您尝试从锁定的表中插入/更新/删除时,您需要等到它可用或直到超时(默认为28800秒).对于行级锁定引擎的死锁,如果它不是空闲的,你会稍等一下,如果服务器检测到某种“无限循环” – 其中2个连接不会放弃一行 – 那么它将快速拒绝这两个连接,陷入僵局.
如果您正在尝试解决死锁问题,我建议您查看以下内容:
>死锁是否发生在事务中的错误代码上?是否真的有必要“保持”一行来完成计算并更新它?
>您的陈述中是否有条件索引?否则InnoDB可能确实将整个表标记为等待更新.
>可能是服务器上的硬盘没有足够快地提交InnoDB变化吗?服务器上的检查点操作会导致InnoDB出现问题/停顿吗?
>是否因为自动增量锁定?如果是这样,也许你应该看一个更*的自动递增 – 设置http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html(也看行级锁定来解决由这些改变引起的一些问题)