【问题标题】:Will deadlocks affect me, even if I don't use transactions?即使我不使用事务,死锁会影响我吗?
【发布时间】:2023-03-16 17:44:01
【问题描述】:

出于多种原因,我们想从 MyISAM 切换到 InnoDB,但我们不打算将事务与 BEGIN/COMMIT 等一起使用。

是否存在仅通过使用 SELECT、INSERT、UPDATE 和 DELETE 就可能发生死锁的情况?我们使用一些 JOIN,当然我们有很多 INDEX。

如果我将所有表都转换为 InnoDB,我如何在现实生活模拟中测试该站点?如果只有几个人在网站上点击,就不会像 100 多个用户在线点击、添加、删除等。你推荐任何工具来做到这一点吗?

提前感谢您提供的任何提示! :)

【问题讨论】:

标签: mysql transactions innodb deadlock myisam


【解决方案1】:

您在这里有 2 个非常不同的问题。

1 是的,即使您没有显式使用事务,也会发生死锁,因为“幕后”行级锁定用于所有插入/更新/删除语句。 Read more here.

2 一般来说,压力/性能测试并不是一项简单的任务,并且没有多少通用工具可以很好地完成这项任务。您如何对其他数据库更改进行压力测试(添加/更改/删除索引、表架构更改)?

【讨论】:

  • 非常感谢,我会阅读上面的文档和其他答案。我们没有做任何压力测试,只有手动测试。但我们发现了一些名为 loadimpact.comloadstorm.com 的工具,听起来很有用。
【解决方案2】:

简而言之,可能会发生死锁,因为(默认设置为AUTOCOMMIT = ON,意思是)每条语句(SELECTUPDATEINSERTDELETE)在 InnoDB 中都被视为单独的事务 - 并且执行后立即自动提交。

请参阅:Implicit Transaction Commit and Rollback

但是,正如@Johan 所指出的,它们在 InnoDB 中的问题应该比 MyISAM 少,因为尽可能使用行级锁定。

还可以查看@MarkR 在此问题中的回答,了解更多详情:Explain Inexplicable Deadlock


关于压力测试,我听说过但没用过Super Smack,这是一个MySQL和PostgreSQL的基准测试和压力测试工具。

但由于大多数用户可能会使用您的 Web 界面,因此此类界面的任何压力测试工具都可能足以满足您的需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多