故事
我有一个使用快照隔离的SPROC通过MERGE执行多次插入。此SPROC以非常高的负载调用,并且通常并行调用,因此它偶尔会抛出错误3960-这表示由于更改冲突而快照回滚。由于高并发性,这是预期的。
问题
我已经实施了一个“重试”队列,以便稍后再次执行此工作,但我很难再现错误以验证我的检查是否准确。
问题
如何重现快照失败(特别是3960)以验证我的重试逻辑是否正常工作?
已经尝试
答案 0 :(得分:1)
打开两个连接,在两者上启动一个快照事务,在连接1上更新一条记录,在连接2上更新同一条记录(在后台因为它会阻塞),然后在连接1上提交
或将用户错误视为3960 ......
答案 1 :(得分:0)
为什么不这样做:
RAISERROR(3960, {sev}, {state})
用生产中发生错误时看到的实际值替换{sev}和{state}?
击>
(不,正如马丁指出的那样,这不起作用。)
如果不是那样,那么我建议尝试多次同时运行您的测试查询。我自己这样做是为了模拟其他并发错误。只要测试查询不是太快(至少几秒钟),它应该是可行的。