即使我不使用交易,死锁也会影响我吗?

时间:2011-10-10 13:09:19

标签: mysql transactions innodb deadlock myisam

我们希望从MyISAM切换到InnoDB有几个原因,但我们不打算使用BEGIN / COMMIT等事务。

是否有任何情况只能通过使用SELECT,INSERT,UPDATE和DELETE来发生死锁?我们使用了一些JOIN,当然我们有很多INDEX。

如果我将所有表格转换为InnoDB,我如何在现实生活模拟中测试网站?如果只有几个人点击网站,那就不会有100个用户在线点击,添加,删除等等。你推荐使用任何工具吗?

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

2 个答案:

答案 0 :(得分:1)

这里有两个非常不同的问题。

1是的,即使您没有明确使用事务,也可能发生死锁,因为“引擎盖下”行级锁定用于所有插入/更新/删除语句。 Read more here

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

答案 1 :(得分:0)

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

请参阅: Implicit Transaction Commit and Rollback

但是,正如@Johan指出的那样,它们应该比InnisDB 更少的问题,因为尽可能使用行级锁定。

另请查看@ MarkR在此问题中的答案,了解详情: Explain Inexplicable Deadlock


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

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