Rick James Asked: 2011-09-15 12:46:13 +0800 CST2011-09-15 12:46:13 +0800 CST 2011-09-15 12:46:13 +0800 CST 表级锁定的好处 772 MyISAM 存储引擎使用的表级锁定有什么好处?行级锁定有很多好处,例如不锁定表的并发更新和读取。 编辑 它广泛认为表级锁定可以防止死锁。但是以并发为代价来预防死锁如何值得呢? mysql locking 4 个回答 Voted RolandoMySQLDBA 2011-09-15T13:06:02+08:002011-09-15T13:06:02+08:00 由于mysql以这种方式安排查询执行: 写请求(如 UPDATE 和 DELETE)优先于读请求(SELECT) 服务器执行写入FIFO方式(按接收顺序) 有什么好处? MyISAM 永远不会发生死锁。MySQL 服务器因此可以管理所有争用,显式(LOCK TABLE)或隐式(任何 DML)。 只要 MyISAM 表没有删除或更新记录,并发插入就可以自由发生而不受惩罚。实际上,这将在具有显式读锁的表上包含 INSERT。 对于任何有间隙的表,运行 OPTIMIZE TABLE 将删除这些间隙并再次允许并发插入。 有关更多信息,请阅读“MySQL 5.0 认证学习指南”第 408-412 页第 29.2 节。 Best Answer Jonathan 2011-09-15T23:08:22+08:002011-09-15T23:08:22+08:00 MyISAM 没有死锁,但死锁在某种程度上是对表级锁定的改进。 当您尝试从锁定的表中插入/更新/删除时,您需要等待它可用或直到您获得超时(默认为 28800 秒)。使用行级锁定引擎上的死锁,如果它不是空闲的并且如果服务器检测到一种“无限循环”——其中 2 个连接不会放弃一行——那么它会快速拒绝这两个连接并且给僵局。 如果您正在尝试解决死锁,我建议您查看以下内容: 死锁是否发生在事务中的错误代码上?真的有必要为你“保持”一行来完成你的计算并更新它吗? 您的语句中是否有条件索引?否则 InnoDB 可能确实将整个表标记为等待更新。 难道是服务器上的硬盘没有足够快地提交 InnoDB 更改?服务器上的检查点操作是否会导致 InnoDB 出现问题/停止? 是因为自动增量锁定吗?如果是这样,也许你应该看看更自由的自动递增 - 设置http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html(也看看行级锁定解决此类更改引起的一些问题) Derek Downey 2011-09-15T12:58:51+08:002011-09-15T12:58:51+08:00 表锁(例如 MyISAM 使用的)没有死锁问题。 Mike Sherrill 'Cat Recall' 2011-09-17T08:46:12+08:002011-09-17T08:46:12+08:00 两个好处。 一个。锁定表是解决死锁问题的蛮力算法的一个例子。对于合适的“作品”值,蛮力总是有效的。 据报道,Unix 的共同发明者 Ken Thompson 曾说过一句警句“当有疑问时,使用蛮力”。他可能只是想把这当成是认真的,但最初的 Unix 内核偏爱简单、健壮和可移植的算法,而不是易碎的“智能”算法,这似乎是该操作系统成功的一个重要因素。就像软件设计中的许多其他权衡一样,在蛮力和复杂的、经过微调的聪明之间做出选择通常是一个困难的选择,既需要精通工程,又需要精致的审美判断。 湾。当您获得工程知识和审美判断时,您无疑会做出不同的决定。这不影响上述“a”的有效性。
由于mysql以这种方式安排查询执行:
有什么好处?
MyISAM 永远不会发生死锁。MySQL 服务器因此可以管理所有争用,显式(LOCK TABLE)或隐式(任何 DML)。
只要 MyISAM 表没有删除或更新记录,并发插入就可以自由发生而不受惩罚。实际上,这将在具有显式读锁的表上包含 INSERT。
对于任何有间隙的表,运行 OPTIMIZE TABLE 将删除这些间隙并再次允许并发插入。
有关更多信息,请阅读“MySQL 5.0 认证学习指南”第 408-412 页第 29.2 节。
MyISAM 没有死锁,但死锁在某种程度上是对表级锁定的改进。
当您尝试从锁定的表中插入/更新/删除时,您需要等待它可用或直到您获得超时(默认为 28800 秒)。使用行级锁定引擎上的死锁,如果它不是空闲的并且如果服务器检测到一种“无限循环”——其中 2 个连接不会放弃一行——那么它会快速拒绝这两个连接并且给僵局。
如果您正在尝试解决死锁,我建议您查看以下内容:
表锁(例如 MyISAM 使用的)没有死锁问题。
两个好处。
一个。锁定表是解决死锁问题的蛮力算法的一个例子。对于合适的“作品”值,蛮力总是有效的。
湾。当您获得工程知识和审美判断时,您无疑会做出不同的决定。这不影响上述“a”的有效性。