相关疑难解决方法(0)

Sch-M WAIT 阻止 SQL Server 2014 中的 Sch-S 而不是 SQL Server 2008 R2?

我们最近将生产实例从 SQL 2008 R2 迁移到全新的 SQL 2014 服务器。这是我们在使用 Service Broker 时发现的一个有趣场景。考虑一个Broker Enabled = true带有MyService和的数据库MyQueue。此队列上禁用了毒物消息处理。队列中至少有 2 个与消息的活动对话。

在一个进程 (SPID 100) 中执行:

BEGIN TRANSACTION;
DECLARE @conversation_group_id UNIQUEIDENTIFIER;
RECEIVE TOP (1) @conversation_group_id = conversation_handle FROM MyQueue;
Run Code Online (Sandbox Code Playgroud)

请注意,我们将事务保持打开状态。假设它是一个 .NET 程序,它在某些外部资源上等待了很长时间。通过sys.dm_tran_locks我们看到该 SPID 已被授予对队列的 IX 锁。

| type   | resource_id | mode | status | spid |
| OBJECT | 277576027   | IX   | GRANT  | 100  |
Run Code Online (Sandbox Code Playgroud)

在单独的进程 (SPID 101) 中执行五次

BEGIN TRANSACTION;
DECLARE @conversation_group_id …
Run Code Online (Sandbox Code Playgroud)

sql-server service-broker locking

11
推荐指数
1
解决办法
2810
查看次数

标签 统计

locking ×1

service-broker ×1

sql-server ×1