我继承了一个使用InnoDB表构建在MySQL数据库上的系统。系统有一个在负载过重时出现的错误。我已经创建了一些jmeter测试来加载系统,希望在受控环境中看到错误。但是,我没有正确地强调系统,并且bug从未显示出来。当前的理论是,严重锁定的表会导致回滚,使用户的数据处于一种奇怪的状态。这可能意味着事务结构不正确,我希望找到并修复它,但我需要首先找到问题所在。
我猜想,如果我可以在数据库中创建各种受控的“表锁加载”,那么我就可以在整个系统上运行我的模拟用户,并强制出现bug或证明理论是错误的,但我不确定如何创建这样的东西。有没有人知道如何最好地做到这一点?在这一点上,我甚至不确定一个糟糕的第一个版本会是什么样子,所以任何让我入门的想法都会有所帮助。谢谢!
发布于 2012-11-03 13:00:11
如果您专门查找表中某一行的锁定状态(我假设这就是您的意思,除非您正在对表本身执行动态更改)。您可以通过让第二个脚本在一组行上启动事务,然后在回滚或提交事务之前暂停一段时间来实现这一点。
假设您有这样的表结构,例如:
CREATE TABLE `allkindsofvalues` (
`value1` int(11) NOT NULL,
`value2` int(11) NOT NULL,
`irrelevant_value3` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;打开MySQL提示符,发起交易:
BEGIN;
UPDATE allkindsofvalues SET irrelevant_value3 = '32143234232';现在启动您的应用程序。此时,任何使用这些行的尝试都将等待启动的事务完成。
在MySQL提示符中提交或回滚事务的那一刻,一切都应该正常进行,但在此之前,行将处于锁定状态,无法访问。这听起来像是你试图复制的条件。
https://stackoverflow.com/questions/13170468
复制相似问题