我尝试编写数据库代码以确保它不受竞争条件的影响,以确保我已锁定正确的行或表.但我经常想知道:我的代码是否正确?是否有可能强制显示任何现有的竞争条件?我想确保如果它们确实发生在生产环境中,我的应用程序将做正确的事情.
我一般都知道哪个并发查询可能会导致问题,但我不知道如何强制它们并发运行以查看是否发生了正确的行为(例如我使用了正确的锁定类型),正确的错误是抛出等
注意:我使用的是PostgreSQL和Perl,所以如果一般不能回答这个问题,那么它应该会被重新标记.
更新:如果解决方案是程序化的,我更喜欢它.这样我就可以编写自动化测试来确保没有回归.
解决方法
我一直用我的T-SQL模块做这件事.
基本上,您需要做的就是在一个循环中从两个或多个连接运行模块几分钟.通常,假设您的SQL Server盒具有不错的CPU,所有潜在的问题都会在几分钟内暴露出来.
我写了几个例子here和here.