【问题标题】:When to LOCK TABLES in MySQL (MyISAM tables)?何时在 MySQL(MyISAM 表)中锁定表?
【发布时间】:2011-04-19 01:03:20
【问题描述】:
internal locking of MySQL 对于中小型网站是否足够?我的表是 MyISAM。可能有几百人同时使用 SELECT'S 和 INSERT's 访问特定表。所有的 INSERT/UPDATE 查询都不会重叠。也就是说,没有两个用户会更新同一个评论 ID。 INSERT/UPDATE 将是一次性操作——不会读取数据并在同一查询中执行其他操作。
具体来说,我正在为我的网站设置评论/聊天系统。在最坏的情况下,可能有几百人在评论/聊天表上执行 SELECT 语句以阅读新帖子。关于 INSERT,可能有 100(?) 个不同的人随时尝试 INSERT 一条新评论。
我在另一个关于 SO 的问题中找到了this article,它指出 LOCK TABLES“从不用于独立的插入、更新或删除操作”。这是我可能拥有的数据库流量的好习惯吗? TIA 的任何建议。
【问题讨论】:
标签:
mysql
concurrency
locking
myisam
【解决方案1】:
锁定 MyISAM 表的唯一形式是表锁。这个想法是,他们将它设计得足够快,以至于在它工作时没有其他人需要访问。对 - YMM 绝对是 V。但是对于大多数中小型网站来说,这很好。例如,这就是 WordPress 使用的。
【讨论】:
-
现在实施某种形式的锁定会更好——期待更多的用户受众吗?据我了解,MyISAM 表允许并发查询(INSERT/UPDATE/SELECT/etc.),并且有一个 MySQL 系统变量来处理这些并发事件(concurrent_insert)。此变量处理 MyISAM 表处理表中间的孔(来自 DELETES/等)的方式。如果处理不当,这些“漏洞”会成为数据损坏的根源吗? TIA。
【解决方案2】:
如果同时查看行和编辑,锁定可能只是您需要担心的事情。不必担心锁定您正在做的事情 - 这样做不仅是一种好习惯,在这里使用锁定会损害性能。