1205: Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim(事务(进程 ID)与另一个进程在锁资源上发生死锁,已被选为死锁牺牲者)
SQL Server含义
两个或多个事务各自等待对方持有的锁(死锁)。为打破循环,SQL Server 选择一个事务作为牺牲者并将其回滚。
原因
事务以不同顺序锁定表/行、长时间运行的事务、缺少索引导致的大范围扫描、锁升级以及高并发是典型原因。
解决方法
在应用中捕获错误 1205 并自动重试事务。在每个事务中以相同顺序访问对象,并保持事务简短。检查死锁图:使用 Extended Events(system_health 会话)或跟踪标志 1222 获取详情。添加合适的索引以减少扫描和加锁。必要时评估 READ COMMITTED SNAPSHOT(RCSI)隔离级别。
同一数据库的其他条目
- 2627Violation of PRIMARY KEY / UNIQUE KEY constraint. Cannot insert duplicate key in object(违反 PRIMARY KEY / UNIQUE KEY 约束。不能在对象中插入重复键)
- 2601Cannot insert duplicate key row in object with unique index. The duplicate key value is ...(不能在具有唯一索引的对象中插入重复键行。重复键值为 ...)
- 547The INSERT/UPDATE/DELETE statement conflicted with the FOREIGN KEY / CHECK constraint(INSERT/UPDATE/DELETE 语句与 FOREIGN KEY / CHECK 约束冲突)
- 18456Login failed for user(用户登录失败)