2015-08-14 65 views
1

有沒有TIMEOUT的WAITFOR RECEIVE對性能的影響是什麼?對Service Broker的性能影響無WAITFOR RECEIVE無TIMEOUT

我們已經構建了一個.Net服務,用於接收來自SQL Server Service Broker隊列的消息,然後將消息發送給ActiveMQ。

而不是讓服務輪詢SQL Server Service Broker隊列每5秒如果我們在沒有TIMEOUT的隊列上執行WAITFOR RECEIVE,性能影響如何?

回答

2

從文檔上RECEIVE

聲明等到至少一條消息變爲可用,然後 返回一個包含所有消息列的結果集。

會發生什麼事是,WAITFOR RECEIVE將暫停,等待消息進來,只有當消息不來的回報。如果這不可能發生,它會永遠坐在那裏。

這不會消耗服務器資源(除了捆綁一個監聽器),但是如果消息不經常收到,它很難終止發起呼叫的程序。 TIMEOUT條款的好處在於,它爲應用程序提供了一種定期檢查是否有人要求程序終止的方法。如果沒有超時將控制權返回給調用線程並讓它檢查它是否應該退出本身,那麼唯一的選擇就是強制從外部終止線程。

通過每5秒循環呼叫而不是無限期地保持對服務器的影響差異太小而無法測量。