【问题标题】: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】:

    如果同时查看行和编辑,锁定可能只是您需要担心的事情。不必担心锁定您正在做的事情 - 这样做不仅是一种好习惯,在这里使用锁定会损害性能。

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 2014-10-30
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      相关资源
      最近更新 更多