您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

这个简单的代码会产生死锁。包含简单的示例程序

这个简单的代码会产生死锁。包含简单的示例程序

您的两个语句以不同的顺序获取行锁。这是死锁的典型案例。您可以通过确保所采用的锁定顺序始终处于某种全局顺序(例如,按ID顺序)来解决此问题。您可能应该将这两个UPDATE语句合并为一个,并在将客户端上的ID列表排序之前,将其发送到sql Server。对于许多典型的UPDATE计划,它实际上可以正常工作(尽管不能保证)。

或者,您添加重试逻辑以防检测到死锁(sqlException.Number == 1205)。这更优雅,因为它不需要更深层的代码更改。但是死锁会对性能产生影响,因此只有在低死锁率时才这样做。

如果您的并行处理生成大量更新,则可以将INSERT所有这些更新放入一个临时表中(可以同时进行),完成后,您执行一个大操作UPDATE,将所有单独的更新记录复制到主表中。您只需在示例查询中更改联接源。

其他 2022/1/1 18:40:01 有525人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶