在EF执行数据库查询时,如果查询语句中,有连接查询语句时,就会产生对表进行锁定,如果此时对锁定的表再次加锁操作(delete ,insert)就会死锁。

检查的方法:

1、查询出现死锁的记录

2、分析记录来对EF语句进行调整

 

一、下面来说一下怎样来查询死锁相关的表(SQL Profiler)【此部分参考:】

 

一个方便直观的方法就是使用SQL Server Profiler来查看死锁,本篇主要讲解这种方法,具体步骤如下:

步骤1:打开SQL Server Profiler
通过”Microsoft SQL Server Management Studio->Tools->SQL Server Profiler“运行SQL Server Profiler

EF中查询出现死锁的处理

步骤2:打开之后按照如下图所示,设置trace properties的General标签页上的属性

 EF中查询出现死锁的处理

步骤3:按照右图所示,设置Events Selection,设置完之后点击“Run”按钮开始跟踪事件。

EF中查询出现死锁的处理


步骤4:等待死锁发生,查看事件信息,找到Deadlock Graph查看死锁,如右图所示。

EF中查询出现死锁的处理

 

按照如下步骤可以产生死锁:

1.在SQL Server management studio中,打开一查询,输入如下语句:

1: BEGINTRANSACTION
   2:  
update AdventureWorks.Person.Address
   4:  
'a'
   6:  
where AddressID=1
   8:  
'00:00:10'
  10:  
update AdventureWorks.Person.Address
  12:  
'b'
  14:  
where AddressID=2

相关文章:

  • 2022-12-23
  • 2021-11-23
  • 2021-08-10
  • 2021-10-28
  • 2022-12-23
  • 2021-12-10
  • 2021-12-10
  • 2022-01-31
猜你喜欢
  • 2021-12-21
  • 2022-12-23
  • 2021-09-15
  • 2018-08-21
  • 2022-02-08
相关资源
相似解决方案