SQL 服务器 Service Broker 和批处理
SQL Server Service Broker and batches
我对 SQL 服务器(本例中为 2008 R2)Service Broker 的消息仅根据对话进行批处理的理解是否正确?换句话说,如果我有这样的查询:
DECLARE @messages TABLE(
handle UNIQUEIDENTIFIER,
message_body NVARCHAR(MAX),
message_type_name SYSNAME
);
RECEIVE TOP 5
conversation_handle,
message_body,
message_type_name
FROM dbo.MyMessageQueue
INTO @messages
SELECT conversation_handle, message_body FROM @messages
如果它们来自同一个对话,我只会返回五行?目前我正在一次一个对话地发送我的消息,但是如果队列中有十个这样的消息,那么它们一次只会被返回一个。
RECEIVE
只会使属于 一个会话组 的消息出队。除非您进行明确的对话组管理,否则每个对话都是它自己的组。如果您每次对话只发送一条消息,那么您最终每次只会发送 RECEIVE
-ing 一条消息。 Conversation Group Locks.
中对此进行了介绍
RECEIVE
对 运行 来说是一个相当昂贵的声明,因此为了高吞吐量,您必须将更多消息组合在一起,通常通过 conversation reuse.
我对 SQL 服务器(本例中为 2008 R2)Service Broker 的消息仅根据对话进行批处理的理解是否正确?换句话说,如果我有这样的查询:
DECLARE @messages TABLE(
handle UNIQUEIDENTIFIER,
message_body NVARCHAR(MAX),
message_type_name SYSNAME
);
RECEIVE TOP 5
conversation_handle,
message_body,
message_type_name
FROM dbo.MyMessageQueue
INTO @messages
SELECT conversation_handle, message_body FROM @messages
如果它们来自同一个对话,我只会返回五行?目前我正在一次一个对话地发送我的消息,但是如果队列中有十个这样的消息,那么它们一次只会被返回一个。
RECEIVE
只会使属于 一个会话组 的消息出队。除非您进行明确的对话组管理,否则每个对话都是它自己的组。如果您每次对话只发送一条消息,那么您最终每次只会发送 RECEIVE
-ing 一条消息。 Conversation Group Locks.
RECEIVE
对 运行 来说是一个相当昂贵的声明,因此为了高吞吐量,您必须将更多消息组合在一起,通常通过 conversation reuse.