Questions tagged «deadlock»

由两个或多个进程无法进行操作(并因此释放其锁)导致的情况,因为它们被另一个进程所拥有的资源上的锁所阻塞。

2
SQL Server索引更新死锁
我有2个查询,当同时运行时会导致死锁。 查询1-更新索引(index1)中包含的列: update table1 set column1 = value1 where id = @Id 在table1上获取X-Lock,然后在index1上尝试X-Lock。 查询2: select columnx, columny, etc from table1 where {some condition} 在index1上获取S-Lock,然后在table1上尝试S-Lock。 有没有办法在保持相同查询的同时防止死锁?例如,我是否可以在更新之前以某种方式对更新事务中的索引进行X锁定,以确保表和索引访问的顺序相同-这样可以防止死锁? 隔离级别为“已提交读”。已为索引启用行锁和页锁。同一条记录可能同时参与这两个查询-从死锁图中我看不出来,因为它没有显示参数。 死锁图

1
SQL扩展事件会话,用于死锁检测
有没有办法增加<inputbuf>死锁扩展事件会话捕获的死锁XML中元素的大小? 我们希望看到完整的查询,以帮助在应用程序代码中查明问题。 似乎仅限于1024个字符+/-。可以增加吗? 请参阅下面的XML示例。您可以看到<inputbuf>元素的查询文本在选择列表的中间被截断了: <deadlock> <victim-list> <victimProcess id="processc9c0829848" /> </victim-list> <process-list> <process id="processc9c0829848" taskpriority="0" logused="0" waitresource="PAGE: 5:1:40600276 " waittime="696" ownerId="255115931225" transactionname="SELECT" lasttranstarted="2019-04-24T09:29:25.950" XDES="0xc8dfa8da40" lockMode="S" schedulerid="13" kpid="8480" status="suspended" spid="245" sbid="2" ecid="0" priority="0" trancount="0" lastbatchstarted="2019-04-24T09:29:25.950" lastbatchcompleted="2019-04-24T09:29:25.950" lastattention="1900-01-01T00:00:00.950" clientapp="EntityFramework" hostname="MSR-PRD-BDB02" hostpid="43440" loginname="IUSR_BuildDB" isolationlevel="read committed (2)" xactid="255115931225" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame procname="adhoc" …

2
如果按顺序执行,这两个查询会导致死锁吗?
几乎可以肯定这是我提出另一个问题的原因,但是我认为有必要将两者分开,因为我有一个假设,该假设基于以下日志,我希望对其进行伪造或验证。 我的假设是,另一个死锁实际上是以下查询的结果,根据我的理解,隐藏原始查询的原因是innodb状态仅显示最近的事务(这对吗?)。 根据日志,我检查了我们的代码,发现依次执行了以下两个查询: db.Execute("UPDATE people SET iphone_device_id=NULL WHERE iphone_device_id=@0 AND people_id<>@1", DeviceID, m_User.people_id); // I have hard coded this query in this snippet to simplify things db.Execute("UPDATE people SET company_id = 444, name = 'Dad', password = '<pass>', temp_password = NULL, reset_password_hash = NULL, email = '<redacted>@gmail.com', phone = NULL, …

1
死锁报告中“锁定记录但不等待间隙”的含义
关于locks rec but not gap waitingTRANSACTION(1)中的含义,哪个正确? 已经授予间隙锁,正在等待聚集索引X锁? 已经授予聚集索引X锁,正在等待间隙锁? Transaction(1)中有31行。这些行的含义是什么?这代表间隙锁定吗? 0: len 4; hex 800c20d6; asc ;; .... 29: SQL NULL; 30: SQL NULL; 最新检测到的死锁报告 LATEST DETECTED DEADLOCK ------------------------ 2015-09-25 15:27:24 1b8084000 *** (1) TRANSACTION: TRANSACTION 5226928, ACTIVE 0 sec fetching rows mysql tables in use 1, locked 1 LOCK WAIT …
12 mysql  deadlock 

1
查看最后几个innodb僵局
我看到可以在mysql / innodb中查看最新的死锁,但是有没有办法查看过去的死锁?我们有两个僵局问题,一个很重要,另一个不重要。不太重要的死锁每天发生几次,因此它成为“最新的”死锁。

2
有理由使用SELECT…WITH XLOCK?
我面临着一些反复出现的死锁,其中之一是键锁,并且包含带有XLOCK提示的SELECT查询,该查询成为了死锁的受害者。另一个语句是对其中一个表的INSERT,该表是第一个查询的视图的一部分。 视图: create view dbo.viewE as select * from dbo.E where myValue > 13000 选择查询: select * from dbo.viewE with (XLOCK) where A > GETUTCDATE() INSERT语句: INSERT INTO [dbo].[E] (myValue,A) VALUES (10,GetDate()) 基础表dbo.E在大约20列中拥有约300万行,其中有些是ntext。 取出查询并使用两个事务手动进行模拟,该行为是可重现的。如果从选择中删除了XLOCK,则行为会更改。 死锁图: <deadlock-list> <deadlock victim="process222222221"> <process-list> <process id="process222222221" taskpriority="0" logused="0" waitresource="KEY: 5:72057604035644444 (ccdf51accc0c)" waittime="2522" ownerId="27202256401" transactionname="SELECT" lasttranstarted="2015-09-14T16:32:36.160" …

1
删除语句死锁
运行SQL Server作业时出现死锁。死锁发生在简单的DELETE语句上。我本以为必须要运行SELECT / UPDATE查询才能引起死锁?但是看起来是DELETE / DELETE死锁... 我要寻找的是为什么会出现DELETE / DELETE死锁。(据我所知)传递了不同的参数。 有任何想法吗?谢谢。 deadlock-list 2014-05-20 07:30:09.66 spid25s deadlock victim=process409048 2014-05-20 07:30:09.66 spid25s process-list 2014-05-20 07:30:09.66 spid25s process id=process409048 taskpriority=0 logused=0 waitresource=PAGE: 12:1:7127294 waittime=4352 ownerId=629860973 transactionname=DELETE lasttranstarted=2014-05-20T07:30:05.307 XDES=0x397219620 lockMode=U schedulerid=5 kpid=3792 status=suspended spid=150 sbid=0 ecid=3 priority=0 trancount=0 lastbatchstarted=2014-05-20T07:30:05.307 lastbatchcompleted=2014-05-20T07:30:05.307 clientapp=QSQL25 hostname=MORRIS hostpid=1528 isolationlevel=read committed …

1
由于索引锁定顺序,SQL Server两次更新发生死锁
我有两个UPDATE-一个先锁定CI,然后再锁定NCI(处于状态),因为status列也在被更新。另一个已经在NCI上拥有U锁,因为它知道它正在更改,然后尝试在CI上获取U锁。 强制这些序列化的最简单方法是什么?使用TABLE级别的提示似乎很奇怪,因为这是一个内部索引问题-仅涉及一个表-UPDLOCK和HOLDLOCK是否会自动应用于该表上所需的所有索引,从而强制对其进行序列化? 以下是查询: UPDATE htt_action_log SET status = 'ABORTED', CLOSED = GETUTCDATE() WHERE transition_uuid = '{F53ADDDA-E46B-4726-66D8-D7B640B66597}' AND status = 'OPEN'; 一个X锁定CI(在CREATED列上)中的行,然后尝试X锁定包括状态列的NCI。 UPDATE htt_action_log SET status = 'RUNNING {36082BCD-EB52-4358-E3D3-4D96FD5B9F0F} 1360094342' WHERE action_uuid = (SELECT TOP 1 action_uuid FROM htt_action_log WHERE transition_uuid = '{F53ADDDA-E46B-4726-66D8-D7B640B66597}' AND status = 'OPEN' ORDER BY action_seq) 这个U锁定相同的NCI-对于我猜的嵌套查询,然后锁定CI进行更新。 …

1
为什么死锁图上有无害条目?
我正在尝试学习如何分析SQL Server 2008的死锁图,并且发现了大量带有空<victim-list>节点的条目。我不明白这些条目代表什么:如果没有受害者,我如何确定导致死锁的waitresource?这些条目是什么意思? 这是我看到的条目的快速示例: <deadlock-list> <deadlock> <victim-list /> <process-list> <process id="processd2b6508" taskpriority="0" logused="10000" waittime="31" schedulerid="63" kpid="9104" status="suspended" spid="69" sbid="0" ecid="184" priority="0" trancount="0" lastbatchstarted="2012-07-30T01:10:45.550" lastbatchcompleted="2012-07-30T01:10:45.550" clientapp=".Net SqlClient Data Provider" hostname="XXXXXXX" hostpid="3648" isolationlevel="read committed (2)" xactid="30461033" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame procname="" line="1" sqlhandle="0x020000002340c50225c17d0eec9bf7c51129348edffd1c70" /> <!--About 2 more frame tags... --> …

5
如何监视死锁
您何时开始对SQL Server 2005/2008死锁进行故障排除以及如何解决?通过SQL Server性能状况警报,对象-> SQLServer:Locks,计数器->锁定等待/秒,实例:_Total,如果计数器:值超过3发出警报来打开SSMS警报。这是否是一种主动的监视方式?可接受的值是多少?我非常感谢您的帮助。谢谢!!!

2
为什么此查询会导致死锁?
为什么此查询会导致死锁? UPDATE TOP(1) system_Queue SET [StatusID] = 2, @ID = InternalID WHERE InternalID IN ( SELECT TOP 1 InternalID FROM system_Queue WHERE IsOutGoing = @IsOutGoing AND StatusID = 1 ORDER BY MessageID ASC, InternalID ASC) 添加了死锁图: <keylock hobtid="72057594236436480" dbid="9" objectname="Z.dbo.system_Queue" indexname="PK_system_Queue" id="lock5b25cc80" mode="X" associatedObjectId="72057594236436480"> <owner-list> <owner id="processc6fe40" mode="X"/> </owner-list> <waiter-list> …


2
如果并行交换事件死锁是无受害者的,这有问题吗?
我们在生产环境中会看到很多此类查询内并行线程死锁(SQL Server 2012 SP2-是的...我知道...),但是当查看通过扩展事件捕获的死锁XML时,受害者名单是空的。 <victim-list /> 死锁似乎在4个线程之间,两个带有WaitType="e_waitPipeNewRow",两个带有WaitType="e_waitPipeGetRow"。 <resource-list> <exchangeEvent id="Pipe13904cb620" WaitType="e_waitPipeNewRow" nodeId="19"> <owner-list> <owner id="process4649868" /> </owner-list> <waiter-list> <waiter id="process40eb498" /> </waiter-list> </exchangeEvent> <exchangeEvent id="Pipe30670d480" WaitType="e_waitPipeNewRow" nodeId="21"> <owner-list> <owner id="process368ecf8" /> </owner-list> <waiter-list> <waiter id="process46a0cf8" /> </waiter-list> </exchangeEvent> <exchangeEvent id="Pipe13904cb4e0" WaitType="e_waitPipeGetRow" nodeId="19"> <owner-list> <owner id="process40eb498" /> </owner-list> <waiter-list> <waiter id="process368ecf8" …

2
Tablock提示触发死锁
我使用最少的日志记录,通过两个并行运行的Execute SQL Tasks和以下形式的SQL将两个数据集插入到空堆表中。 INSERT INTO Table (TABLOCK) SELECT FROM ... 作业暂停后,其中一个SQL任务成为死锁受害者。下面是死锁图的XML输出。 有人可以解释幕后发生的事情吗? <resource-list> <objectlock lockPartition="0" objid="1586156746" subresource="FULL" dbid="7" objectname="dbo.TargetTable" id="lock7374a00" mode="IX" associatedObjectId="1586156746"> <owner-list> <owner id="process9609dc8" mode="Sch-S"/> <owner id="process9609dc8" mode="IX"/> </owner-list> <waiter-list> <waiter id="process5e13048" mode="X" requestType="convert"/> </waiter-list> </objectlock> <objectlock lockPartition="0" objid="1586156746" subresource="FULL" dbid="7" objectname="dbo.TargetTable" id="lock7374a00" mode="IX" associatedObjectId="1586156746"> <owner-list> <owner id="process5e13048" mode="Sch-S"/> …

1
SQL Server何时获取锁?
此处找到的SQL Server隔离级别列表指出,在事务内获取的写锁将保留到事务结束。但是,它没有提及何时获得这些锁。 默认情况下是否在事务开始时或仅在需要时获取锁?如果后者为真,那么在大型事务中尽可能晚执行写操作以最小化持有X锁的时间量是否有利?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.