我们希望从MyISAM切换到InnoDB有几个原因,但我们不打算使用BEGIN / COMMIT等事务。
是否有任何情况只能通过使用SELECT,INSERT,UPDATE和DELETE来发生死锁?我们使用了一些JOIN,当然我们有很多INDEX。
如果我将所有表格转换为InnoDB,我如何在现实生活模拟中测试网站?如果只有几个人点击网站,那就不会有100个用户在线点击,添加,删除等等。你推荐使用任何工具吗?
提前感谢您的任何提示! :)
答案 0 :(得分:1)
这里有两个非常不同的问题。
1是的,即使您没有明确使用事务,也可能发生死锁,因为“引擎盖下”行级锁定用于所有插入/更新/删除语句。 Read more here
2一般来说,压力/性能测试不是一项微不足道的任务,并且没有很多通用工具可以很好地完成。您如何压力测试其他数据库更改(添加/更改/删除索引,表架构更改)?
答案 1 :(得分:0)
简而言之,可能会发生死锁,因为(默认设置为AUTOCOMMIT = ON
,意味着)每个语句(SELECT
,UPDATE
,INSERT
,DELETE
)在InnoDB中被视为一个单独的事务 - 并在执行后立即自动提交。
请参阅: Implicit Transaction Commit and Rollback
但是,正如@Johan指出的那样,它们应该比InnisDB 更少的问题,因为尽可能使用行级锁定。
另请查看@ MarkR在此问题中的答案,了解详情: Explain Inexplicable Deadlock
对于压力测试,我听说过但没有使用Super Smack,这是MySQL和PostgreSQL的基准测试和压力测试工具。
但由于大多数用户可能会使用您的网络界面,因此任何用于此类界面的压力测试工具都可能足以满足您的需求。