共用方式為


疑難排解交談優先權

本主題提供與 Service Broker 交談優先權相關之常見徵兆的更正建議。

技術:判斷 HONOR_BROKER_PRIORITY 是否為 ON。

使用 sys.databasesis_broker_priority_honored 資料行來判斷 HONOR_BROKER_PRIORITY 資料庫選項的狀態:

SELECT name AS database_name,
       CASE is_broker_priority_honored
            WHEN 0 THEN N'OFF'
            WHEN 1 THEN N'ON'
       END AS is_broker_priority_honored
FROM sys.databases
ORDER BY database_name;

徵兆:未以優先權順序傳送訊息

開啟 SQL Server Profiler 追蹤並檢閱 Broker Remote Message Ack 事件。StarvationElevation 資料行中的值為 1 時,表示提高訊息的優先權以防匱乏。HonorBokerPriority 資料行中的值為 0 時,表示未在傳送資料庫中啟用 HONOR_BROKER_PRIORITY 選項。

同時,檢閱 Broker/DBM Transport 系統監視器計數器來查看不同優先順序等級之訊息的傳輸速率。

徵兆:未以優先權順序接收訊息

RECEIVE 陳述式僅能從一個交談群組擷取訊息。如果訊息屬於不同的交談群組,該陳述式將不會從高優先權交談中擷取訊息。

沒有 WHERE 子句的 RECEIVE 陳述式會從最高優先權的已解除鎖定交談群組中擷取訊息。如果交談群組中混合高優先權和低優先權的交談,RECEIVE 陳述式可能會從低優先權交談中擷取訊息。即使佇列在其他群組中擁有高優先權交談的訊息,也會發生這個狀況。

具有可指定交談群組之 WHERE 子句的 RECEIVE 陳述式僅會從指定之交談群組擷取訊息。不管來自其他交談群組之訊息的優先順序等級為何,RECEIVE 陳述式都會從群組中的低優先群交談擷取訊息。

徵兆:未將預期的優先順序等級指派給訊息

檢視 sys.conversation_endpoint 來查看是否有將預期的優先順序等級指派給交談端點。如果沒有,請在資料庫中使用 sys.conversation_priorites,根據用於交談端點的合約、本機服務以及遠端服務,檢閱針對交談優先權指定的屬性。