我的SQL Server 2014 SourceDB
和LogDB
對兩個數據庫。在SourceDB上,Service Broker
;並在服務器上,Service Broker External Activator
服務被激活。的Service Broker外部激活響應多久
在SOURCEDB我有TargetQueue其中一個表的(產品)的INSERT觸發器將在TargetQueue變化和TargetQueue具有輕推我的外部EXE客戶端事件通知。在EXE內部客戶端,我最終通過WAITFOR(RECEIVE TOP (1))..
將數據出隊並將它們直接記錄到LogDB。因此,當我啓動SBEA服務並首次插入表中某個記錄(刪除所有記錄後)時,TargetQueue立即填充,但插入到SourceDB的時間間隔直到插入到LogDB爲止約爲3-6秒,事件通知的時間消耗在這裏我猜,我不確定。對於此後的進一步插入,間隔變爲100ms,如下所示。
首先
進一步
- 爲什麼是第一個插入花費太長時間,爲什麼刪除表中的所有記錄後,就變成再走多久?爲什麼更多的人比第一個人短?
- 我可以減少10ms以下的時間間隔,因爲我可以在10ms內實現與SQLCLR幾乎相同的結構,最快的響應對我的應用程序也至關重要? (兩個結構在同一個SQL Server實例本地工作)
Service Broker的本質上是異步的。如果你想使用它作爲一個技術,你應該在設計你的應用程序時考慮到這一點,也就是說,任何產生的消息最終都會被你的進程佔用,但是你所描述的內容聽起來很像你期望的接近隊列中的同步行爲。最終會失望 –
@BenThul我使用的是Service Broker,因爲它是異步的,因爲我的服務器會遇到很高的請求頻率,爲了不中斷這些請求的處理或停留在其中之一,我已經使用Service Broker而不是任何同步結構(因爲我最近在這裏給出了很好的建議)。但如果真的如此,我真的對這個表現感到失望,所以這就是我所要求的。 – ibubi