Questions tagged «blocking»

阻塞的SQL命令在执行时阻止其他读取或写入操作。

2
在阻止的流程报告中清空阻止流程
我正在使用扩展事件来收集阻止的流程报告,并且由于某些原因,某些报告中该blocking-process节点为空。这是完整的xml: <blocked-process-report monitorLoop="383674"> <blocked-process> <process id="processa7bd5b868" taskpriority="0" logused="106108620" waitresource="KEY: 6:72057613454278656 (8a2f7bc2cd41)" waittime="25343" ownerId="1051989016" transactionname="user_transaction" lasttranstarted="2017-03-20T09:30:38.657" XDES="0x21f382d9c8" lockMode="X" schedulerid="7" kpid="15316" status="suspended" spid="252" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2017-03-20T09:39:15.853" lastbatchcompleted="2017-03-20T09:39:15.850" lastattention="1900-01-01T00:00:00.850" clientapp="Microsoft Dynamics AX" hostname="***" hostpid="1348" loginname="***" isolationlevel="read committed (2)" xactid="1051989016" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame line="1" stmtstart="40" sqlhandle="0x02000000f7def225b0edaecd8744b453ce09bdcff9b291f50000000000000000000000000000000000000000" /> <frame line="1" …

6
在Sql Server中,有没有一种方法可以检查选定的一组行是否被锁定?
我们正在尝试更新/删除数十亿行表中的大量记录。由于这是一个受欢迎的表格,因此该表格的不同部分都有很多活动。任何较大的更新/删除活动都会被阻止较长时间(因为它正在等待获取所有行或页锁或表锁的锁),从而导致超时或花费多天才能完成任务。 因此,我们正在更改一次删除少量行的方法。但是我们要检查所选的(例如100或1000或2000行)当前是否已被其他进程锁定。 如果不是,则继续删除/更新。 如果它们被锁定,则移至下一组记录。 最后,回到开始并尝试更新/删除遗漏的内容。 这可行吗? 谢谢,ToC

2
如何找到仍持有锁的查询?
查询sys.dm_tran_locksDMV将向我们显示哪些会话(SPID)持有对表,页面和行等资源的锁定。 对于获得的每个锁,是否有任何方法可以确定哪个SQL语句(删除,插入,更新或选择)导致了该锁? 我知道,most_recent_query_handle在列sys.dm_exec_connectionsDMV给了我们执行的最后一个查询的文本,而是多次其他查询同一个会话(SPID)在跑前和仍持有锁。 我已经使用了该sp_whoisactive过程(来自Adam Machanic),它仅显示了当前在输入缓冲区上的查询(认为DBCC INPUTBUFFER @spid),但并非总是(在我的情况下通常是)获取锁定的查询。 例如: 公开交易/会话 exec一条语句(持有资源锁) 在同一会话上执行另一条语句 打开另一个事务/会话,然后尝试修改在步骤2锁定的资源。 该sp_whoisactive过程将在第3步指出该语句,它不是锁的责任,因此无用。 这个问题来自使用“ 阻塞的流程报告”功能进行分析,以查找生产中阻塞方案的根本原因。每个事务都运行几个查询,大多数情况下,最后一个查询(显示在BPR的输入缓冲区上)很少是持有锁的查询。 我有一个后续问题:有效识别阻塞查询的框架

2
ALTER TABLE上的数据库“冻结”
今天早上,我们的生产环境只是冻结*一段时间,当更改表格时,实际上添加了一列。 令人反感的SQL:ALTER TABLE cliente ADD COLUMN topicos character varying(20)[]; *登录到我们的系统需要从同一张表中进行选择,因此在更改表期间没有人可以登录。实际上,我们必须终止进程以使系统恢复正常运行。 表结构: CREATE TABLE cliente ( rut character varying(30) NOT NULL, nombre character varying(150) NOT NULL, razon_social character varying(150) NOT NULL, direccion character varying(200) NOT NULL, comuna character varying(100) NOT NULL, ciudad character varying(100) NOT NULL, codigo_pais character varying(3) NOT NULL, …

1
sp_procedure_params_90_rowset上的编译阻塞过多
MSDN上该问题的死灰复燃:阻塞的进程报告:这个waitresource是什么“对象:32767:124607697:0 [COMPILE]” 我已经在Profiler中捕获了这些语句。它们的持续时间都超过3秒。超过10岁以上。阻止活动与MSDN的链接相同。 呼叫均使用三部分命名。它们都以不同的形式指定不同的proc,它们看起来如下所示: exec [db1].[sys].sp_procedure_params_90_rowset N'proc1', 1, NULL, NULL exec [db2].[sys].sp_procedure_params_90_rowset N'proc2', 1, NULL, NULL exec [db3].[sys].sp_procedure_params_90_rowset N'proc3', 1, NULL, NULL exec [db4].[sys].sp_procedure_params_90_rowset N'proc4', 1, NULL, NULL 我怎样做才能减少这种阻塞? (编辑)我现在看到以下相同的东西: exec [db1].[sys].sp_primary_keys_rowset N'view1', N'dbo' exec [db2].[sys].sp_primary_keys_rowset N'view1', N'dbo' exec [db3].[sys].sp_primary_keys_rowset N'view1', N'dbo' exec [db4].[sys].sp_primary_keys_rowset N'view1', N'dbo' 这是系统性的事情,但我不知道该怎么办。调用者是通过ADO的VB6。是ADO进行这些调用。 以下是阻止的流程报告示例 <blocked-process-report> <blocked-process> …

1
为什么UPDLOCK导致SELECT挂起(锁定)?
我在SQL SERVER中有一个选择可以锁定整个表。 这是设置脚本(请确保您不覆盖任何内容) USE [master] GO IF EXISTS(SELECT 1 FROM sys.databases d WHERE d.name = 'LockingTestDB') DROP DATABASE LockingTestDB GO CREATE DATABASE LockingTestDB GO USE [LockingTestDB] GO IF EXISTS(SELECT 1 FROM sys.tables t WHERE t.name = 'LockingTestTable') DROP TABLE LockingTestTable GO CREATE TABLE LockingTestTable ( Id int IDENTITY(1, 1), Name …

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


1
由查询存储引起的阻塞。无法清除或禁用
我最近将2016 SQL Server更新为SP2,并于2018年8月发布了最新的CU(KB4458621)。就在最后一天左右,我注意到我正在进行一些阻止。我无法杀死SPID b / c,这不是用户进程。根据SP_WHO2,命令为“查询存储ASYN”。我尝试通过Script和UI清除数据并禁用查询存储。似乎没有任何效果,它只是旋转然后开始引起更多阻塞。还有其他人遇到这个问题吗?谁能帮我弄清楚如何成功禁用查询存储吗?SP_WhoIsActive @show_System_SPIDS =以下1个结果(仅查询存储结果) 更新-这现在导致TempDB驱动器填满。尝试在几个小时后重新启动,看看是否可以解决问题。会及时向大家发布。 谢谢,内特
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.