Mysql 模拟表锁定问题

Mysql 模拟表锁定问题,mysql,locking,Mysql,Locking,我继承了一个使用InnoDB表构建在MySQL数据库上的系统。系统有一个在重载情况下出现的错误。我创建了一些jmeter测试来加载系统,希望在受控环境中看到bug。然而,我没有正确地强调系统,错误永远不会出现。当前的理论是,严重锁定的表会导致回滚,从而使用户的数据处于奇数状态。这可能意味着事务的结构不正确,我希望找到并解决这个问题,但我需要首先找到问题所在 我推测,如果我能在数据库中创建各种受控的“表锁定负载”,那么我就可以在整个系统上运行我的模拟用户,强迫出现错误或证明理论是错误的,但我不确定

我继承了一个使用InnoDB表构建在MySQL数据库上的系统。系统有一个在重载情况下出现的错误。我创建了一些jmeter测试来加载系统,希望在受控环境中看到bug。然而,我没有正确地强调系统,错误永远不会出现。当前的理论是,严重锁定的表会导致回滚,从而使用户的数据处于奇数状态。这可能意味着事务的结构不正确,我希望找到并解决这个问题,但我需要首先找到问题所在


我推测,如果我能在数据库中创建各种受控的“表锁定负载”,那么我就可以在整个系统上运行我的模拟用户,强迫出现错误或证明理论是错误的,但我不确定如何创建这样的东西。有人知道如何最好地做到这一点吗?在这一点上,我甚至不确定一个糟糕的第一个版本会是什么样子,所以任何让我开始的想法都会有所帮助。谢谢

如果您专门查找表中某行的锁定状态(我假设这就是您的意思,除非您正在动态地对表本身执行更改)。您可以通过让第二个脚本在一组行上启动事务,然后在回滚或提交事务之前暂停一段时间来实现这一点

假设您有以下表格结构,例如:

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提示符中提交或回滚事务的那一刻,事情应该会正常继续,但在此之前,行将处于锁定状态,无法访问。这听起来像是您试图复制的条件。

到目前为止,我已经创建了一个jmeter“测试”,它执行选择。。。用于更新,然后更新可疑表中感兴趣的行。到目前为止,我还无法复制这个bug,但这是我唯一能想到的似乎可行的方法。谢谢,Shane,听起来它可能会做到,我将设置它并尝试一下。有没有办法跟踪锁定的内容和锁定的时间?我一直在记录查询,希望能检测到我的bug,但这似乎不足以隔离问题,而且有很多查询。这非常有效,似乎是找到脆弱代码的好方法,所以我接受了答案。我将对此进行详细阐述,看看我是否能够创建一些jmeter测试来模拟更接近真实世界的情况,即锁定经常发生,但不是经常发生。谢谢