代码之家  ›  专栏  ›  技术社区  ›  Peter Lindqvist

删除行导致锁定超时

  •  4
  • Peter Lindqvist  · 技术社区  · 14 年前

    当我试图从表中删除行时,总是会遇到这些错误。这里的特殊情况是我可能同时运行5个进程。

    该表本身是一个具有约450万行的innodb表。我的WHERE子句中使用的列没有索引。其他指数按预期运行。

    它是在一个转换中完成的,首先我删除记录,然后插入替换记录,并且只有在插入所有记录时才提交事务。

    错误信息:

    查询错误:超过了锁等待超时;请尝试在执行从tablename删除时重新启动事务,其中column=value

    在此处创建引用列的索引是否有帮助?我应该显式地锁定行吗?

    我发现了一些有问题的附加信息 #64653 但我认为这并不能完全掩盖我的处境。

    是否确定是DELETE语句导致了错误,或者是查询中的其他语句?DELETE语句是第一个语句,所以看起来很合乎逻辑,但我不确定。

    2 回复  |  直到 10 年前
        1
  •  3
  •   Corey Ballou    14 年前

    一个索引肯定会有帮助。如果您试图替换已删除的记录,我建议您修改查询以使用更新,而不是删除,然后插入(如果可能的话):

    INSERT INTO tableName SET
    column2 = 'value2'
    WHERE column = value
    ON DUPLICATE KEY UPDATE
    column2 = 'value2'
    
        2
  •  1
  •   Michael    14 年前

    索引肯定有帮助。我曾经处理过一个包含用户数据的数据库。Web前端和用户删除有时会出现问题。白天工作得很好(虽然花了很长时间)。但在下午晚些时候,它有时会超时,因为由于当天处理结束,DB服务器的负载更大。 在受影响的列上重击了一个索引,从那以后一切都很顺利。