我们在Server中每天都会经历2-3次死锁。通过分析,我们发现死锁是由同时发生的密钥锁和分页锁组合造成的。
我们实际上使用EF获取数据,查询涉及6个以上的外键关系。
但在某些日子里,由于死锁,系统每天挂起超过6次。主表中有一个聚集索引列(主键字段)
我共享死锁图供您参考。
unknown
unknown
(@p__linq__0 datetime2(7),@p__linq__1 datetime2(7),@p__linq__2 datetime2(7),@p__linq__3 datetime2(7),@p__linq__4 datetime2(7),@p__linq__5 datetime2(7),@p__linq__6 datetime2(7),@p__linq__7 datetime2(7),@p__linq__8 datetime2(7))SELECT
[Project4].[C3] AS [C1],
[Project4].[C59] AS [C2],
[Project4].[C60] AS [C3],
[Project4].[C61] AS [C4],
[Project4].[C62] AS [C5],
[Project4]
unknown
unknown
(@0 int,@1 datetime2(7),@2 int,@3 datetime2(7),@4 int,@5 int,@6 int)UPDATE [dbo].[Mapping]
SET [AssToId] = NULL, [MapStatus] = @0, [Updated] = @1, [Umag] = @2, [MappingCompleteDate] = @3, [DActive] = @4, [Old_Umag] = @5
WHERE ([Id] = @6)
unknown
unknown
(@p__linq__0 datetime2(7),@p__linq__1 datetime2(7),@p__linq__2 datetime2(7),@p__linq__3 datetime2(7),@p__linq__4 datetime2(7),@p__linq__5 datetime2(7),@p__linq__6 datetime2(7),@p__linq__7 datetime2(7),@p__linq__8 datetime2(7))SELECT
[Project4].[C3] AS [C1],
[Project4].[C59] AS [C2],
[Project4].[C60] AS [C3],
[Project4].[C61] AS [C4],
[Project4].[C62] AS [C5],
[Project4]
unknown
unknown
(@p__linq__0 datetime2(7),@p__linq__1 datetime2(7),@p__linq__2 datetime2(7),@p__linq__3 datetime2(7),@p__linq__4 datetime2(7),@p__linq__5 datetime2(7),@p__linq__6 datetime2(7),@p__linq__7 datetime2(7),@p__linq__8 datetime2(7))SELECT
[Project4].[C3] AS [C1],
[Project4].[C59] AS [C2],
[Project4].[C60] AS [C3],
[Project4].[C61] AS [C4],
[Project4].[C62] AS [C5],
[Project4]发布于 2023-03-13 16:32:53
您有一个使用写查询读取查询死锁,这意味着一个或两个查询计划中都有一个或多个密钥查找。
您可以通过使用服务提供商_BlitzCache跟踪查询计划并寻找调优机会:
/*select query*/
EXEC sp_BlitzCache
@OnlySqlHandles = '0x020000000d43691b40a21b2caa8564509985cf4d5ae9c3f30000000000000000000000000000000000000000';
/*update query*/
EXEC sp_BlitzCache
@OnlySqlHandles = '0x020000002d65c221bca694a98771b8d919bc9686028cea870000000000000000000000000000000000000000';其他需要审查的事项:
https://dba.stackexchange.com/questions/324701
复制相似问题