我正在使用C#的websocket。但是我的应用程序变慢了。然后我寻找原因。并且,我们从数据库日志中找到以下查询。该查询(使用不同的GUID)在1小时内工作了75次。而且每个查询都需要很长时间。而且我认为这正在锁定我的数据库。这是什么查询?为什么要花很长时间?它是什么意思“ begin conversation timer
?
exec sp_executesql N'BEGIN CONVERSATION TIMER (''20a12dae-6fe1-e811-80d7-7ca23e8b6dfb'')
TIMEOUT = 120; WAITFOR(RECEIVE TOP (1) message_type_name,
conversation_handle, cast(message_body AS XML) as message_body
from [SqlQueryNotificationService-fe5c857f-d91d-4db0-b6c5-29313929031c])
, TIMEOUT @p2;',N'@p2 int',@p2=60000
答案 0 :(得分:2)
此查询尝试从Service Broker队列中获取消息。使用BEGIN CONVERSATION TIMER,它将超时设置为2分钟(120秒)。如果队列中没有任何内容,它将在2分钟内停止等待消息。您的查询之所以缓慢的一个可能原因是,相应的队列中没有消息,并且它们等待新消息到来,直到超时为止。