表级锁定的好处


7

MyISAM存储引擎使用的表级锁定有什么好处?行级锁定有许多好处,例如并发更新和不锁定表的读取。

编辑它被广泛认为是表级锁定可以防止死锁。但是如何以并发为代价来防止死锁是值得的?

  0

这个讨论是关于MyISAM vs InnoDB的特性没有关于表级锁定的好处。 14 9月. 112011-09-14 21:05:21

5

MyISAM没有死锁,但在某种程度上死锁,是对表级锁定的改进。

当您尝试从锁定的表中插入/更新/删除时,您需要等到它可用或直到超时(默认为28800秒)。对于行级锁定引擎的死锁,如果它不是空闲的,你会等待一段时间,如果服务器检测到某种“无限循环” - 其中2个连接不会放弃一行 - 那么它将快速拒绝这两个连接,陷入僵局。

如果您正在尝试解决死锁问题,我建议您查看以下内容:

  • 死锁是否发生在事务中的错误代码上?是否真的有必要“保持”一行来完成计算并更新它?
  • 您的对帐单中是否有条件索引?否则InnoDB可能确实将整个表标记为等待更新。
  • 可能是服务器上的硬盘没有足够快地提交InnoDB变化吗?服务器上的检查点操作会导致InnoDB出现问题/停顿吗?
  • 是因为自动增量锁定?如果是这样,也许你应该看一个更自由的自动递增 - 设置http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html (也看看行级锁定来解决由此类更改引起的一些问题)

3

表锁(例如由MyISAM使用)免于deadlock问题。

  0

BTW +1首先解决死锁问题!!! 14 9月. 112011-09-14 21:17:32


6

由于mysql以这种方式安排查询执行:

  • 写请求(如UPDATE和DELETE)优先于读请求(SELECT)
  • 服务器执行写入FIFO方式(按接收顺序)

有什么好处?

MyISAM永远不会发生死锁。因此,MySQL服务器可以管理所有争用,显式(LOCK TABLE)或implcit(任意DML)。

只要MyISAM表没有删除或更新的记录,并发插入就可以自由发生而不受惩罚。实际上,这会在具有显式读锁定的表上包含INSERT。

对于任何有间隙的表,运行OPTIMIZE TABLE将删除这些间隙并再次允许并发插入。

有关更多信息,请阅读"MySQL 5.0 Certification Study Guide" pages 408-412 Section 29.2

  0

这种方式永远不会发生死锁,但与没有并发性的缺点相比,它会带来好处。并且在高负载下数据库的吞吐量很慢。 14 9月. 112011-09-14 21:10:03

+2

@rickjames myisam的好处不在于它如何管理更新。在非写密集的情况下最好。 14 9月. 112011-09-14 21:13:01

  0

不幸的是,很多人使用WordPress,Drupal和MoveableTypes CMS,其默认值始终是MyISAM。如果有人拥有高流量的网站,他们必须离开MyISAM。否则,MyISAM就足够了。 14 9月. 112011-09-14 21:13:45

  0

@DTest是对的,但即使在读密集系统中,它与行级锁定相比如何有益? 14 9月. 112011-09-14 21:14:38

  0

即使在一个read-intesive系统中,只有一个DELETE或UPDATE语句会很快消除MyISAM带来的任何好处。 14 9月. 112011-09-14 21:16:59

  0

@rickjames删除死锁是表锁对行锁的'好处'。MyISAM比innodb有其他好处,但这不是关于那个的讨论(innodb比myisam有很多好处!) 14 9月. 112011-09-14 21:25:24

  0

这恐怕是非常典型的MySQL组织。MyISAM具有表级锁定的原因很简单,就是它们无法实现行级锁定(留给给我们InnoDB的第三方)。但他们试图将它旋转,好像它们一直意味着一样。我记得他们曾经说过你不需要外键,交易,存储过程等等,而实际上他们根本就做不到。拿他们的文件用**大量的少量盐。 15 9月. 112011-09-15 18:28:52


3

两个好处。

一个。锁定表是用于解决死锁问题的brute-force algorithm的示例。对于“作品”的合适值,蛮力总是有效。

据报道,Unix的共同发明者肯·汤普森(Ken Thompson)已经说出了“当有疑问时,使用蛮力”。他可能认为这只是一个严肃的哈哈,但最初的Unix内核偏爱简单,强大和便携的算法而不是脆弱的“聪明”算法似乎确实是该操作系统成功的重要因素。像软件设计中的许多其他权衡一样,蛮力与复杂,精细调整的聪明之间的选择往往是一个困难的选择,需要工程师的精明和审美的审美判断。

湾毫无疑问,当你获得工程师的悟性和审美判断时,你会做出不同的决定。这不影响上述“a”的有效性。