首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的聚集索引会导致死锁(Keylock和Pagelocks)

为什么我的聚集索引会导致死锁(Keylock和Pagelocks)
EN

Database Administration用户
提问于 2023-03-13 15:42:33
回答 1查看 170关注 0票数 1

我们在Server中每天都会经历2-3次死锁。通过分析,我们发现死锁是由同时发生的密钥锁和分页锁组合造成的。

我们实际上使用EF获取数据,查询涉及6个以上的外键关系。

但在某些日子里,由于死锁,系统每天挂起超过6次。主表中有一个聚集索引列(主键字段)

我共享死锁图供您参考。

代码语言:javascript
复制
          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]
EN

回答 1

Database Administration用户

回答已采纳

发布于 2023-03-13 16:32:53

最有可能是

您有一个使用写查询读取查询死锁,这意味着一个或两个查询计划中都有一个或多个密钥查找。

代码语言:javascript
复制

您可以通过使用服务提供商_BlitzCache跟踪查询计划并寻找调优机会:

代码语言:javascript
复制
/*select query*/
EXEC sp_BlitzCache 
    @OnlySqlHandles = '0x020000000d43691b40a21b2caa8564509985cf4d5ae9c3f30000000000000000000000000000000000000000';

/*update query*/
EXEC sp_BlitzCache 
    @OnlySqlHandles = '0x020000002d65c221bca694a98771b8d919bc9686028cea870000000000000000000000000000000000000000';

其他需要审查的事项:

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/324701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档