若要識別 MessageBox 資料庫中的瓶頸,請先確定已啟動 SQL-Server-Agent 服務。 將 [服務啟動狀態] 從 [手動] 變更為 [自動],如此一來,即使伺服器重新啟動,服務也會自動重新啟動。
根據預設,如果 Spool、TrackingData 或 ApplicationQ 數據表成長,BizTalk 服務將會進行節流。 這些資料表是由 SQL-Agent 作業修剪,如果這些作業未運行,將導致緩衝區(Spool)增長,進而觸發節流機制以保護資料庫免受額外壓力。 檢查下列效能計數器的狀態:
BizTalk:Message Agent (主機名) 訊息傳遞節流狀態
BizTalk:訊息代理(主機名稱)訊息發佈限流狀態
值為 0 表示沒有發生節流。 值為 6 表示系統因為資料庫成長而進行節流。 請參閱檔,以瞭解如何解譯這些計數器的其他值。
資料緩衝表成長
佇列可能會因為多種原因而開始成長。 Spool成長的其中一個原因是如果應用程式佇列正在增長。 它們可能會因為下游瓶頸和/或資源爭用等各種原因而成長。
如果應用程式佇列很小,而列印緩衝仍然很大,請確認清除作業是否能跟上。 請確定 SQL-Agent 服務正在執行,然後確認下列作業已順利完成:
MessageBox_Message_Cleanup_BizTalkMessageBoxDb
訊息盒_零件_清理_BizTalkMessageBoxDb
如果 MessageZeroSum 數據表很大,表示已處理訊息(DeQueue 已成功完成並刪除來自應用程式佇列數據表的數據),且數據列已標示為要刪除。 不過,清除作業難以跟上刪除數據的速度。 其中一個原因是 SQL-Server 機器遇到嚴重的 CPU 爭用,導致 CPU 資源不足,影響清除作業維持正常運作的能力。
應用程式佇列表格增長
應用程式佇列承載正在處理的過渡數據,一旦完成處理後,就由 DeQueue 進行清理。
在處理這些訊息後,可清除Spool(包含對這些資料列的參考)。
例如,RxHostQ 會將數據發佈至協調流程 PxHostQ,接著將數據發佈至傳送的 TxHostQ,每個參考 Spool 數據表中的數據列。 在特定 HostQ 的訊息順利通過系統處理之後,DeQueue 會刪除這些數據列。 刪除這些數據列之後,因為 Spool 不再被這些數據列引用,所以可以由清理作業來清除。
應用程式佇列的成長表示負責清空應用程式佇列的主機實例無法應付訊息發佈至特定應用程式佇列時的傳入速率。這意謂著,訊息流入特定應用程式佇列的速率超過主機實例處理能力。
例如,協調流程應用程式佇列 (PxHostQ) 可能會成長,因為負責處理協調流程的伺服器是 CPU 系結,而且無法處理得更快。 不過,如果接收伺服器速度很快,可能會發布速度超過協調伺服器的處理能力,導致應用程式佇列成長。
協調佇列增長的另一個原因是記憶體爭用,許多長時間運行的協調實例同時在記憶體中初始化,導致記憶體膨脹,間接引發節流機制,使線程池收縮,直到記憶體壓力得到緩解。 傳送應用程式佇列可能會成長的其中一個原因是下游系統無法快速接收(從 BizTalk 傳出)訊息。 因此,訊息會繼續留存在 BizTalk 系統內,導致應用程式佇列增長,這最終會啟動節流機制,從而降低接收速率,進而影響系統的整體輸送量。
TrackingData 數據表成長
MessageBox 資料庫中的 TrackingData 數據表是轉換數據表,攔截器會寫入訊息和服務實例追蹤和 BAM 追蹤的追蹤數據。 如果停用追蹤,此數據表應該是空的。 預設會針對管線和編排工作流程的 In/Out 事件啟用訊息及服務實例追蹤。
如果已啟用訊息本文追蹤,請確定 MessageBox 伺服器(也就是具有「允許主機追蹤」的主機)正在執行。 它會降低瓶頸,因為它會將數據從 MessageBox 資料庫中的 TrackingData 數據表移至 BizTalkDTADb 數據表。
可以透過啟用自定義訊息和服務實例追蹤,來追蹤自定義事件,例如宣傳屬性和訊息主體的追蹤。 除了追蹤數據之外,BAM 數據也會寫入此數據表。 負責追蹤功能被啟用的主機 (TDDS) 負責將資料從 MessageBox 資料庫移至 BizTalkDTADb 和 BAMPrimaryImport 資料庫,然後在成功移動後刪除此資料。 訊息本文追蹤數據會由 SQL-Agent 作業 TrackedMessages_Copy_BizTalkMsgBoxDb 分開移動。
如果 TDDS 無法跟上攔截器將數據寫入 TrackingData 表的速率,此表會不斷增長,啟動節流機制,最終影響可持續的吞吐量。 若要減輕此問題,請確定至少有1個主機正在執行且已啟用追蹤。
如果數據仍在累積,請檢查 BizTalkDTADb 資料庫,以確保資料庫不會無限制增長。 請確定封存和清除作業正在執行,而且能夠跟上數據到達的速率。
備註
清除作業無法刪除 BizTalkDTADb 資料表中的資料,直到這些資料被封存為止。
確認 TrackingData 數據表未成長。 請確定至少有 1 個正在執行的主機實例已啟用追蹤 (TDDS)。 如果 BizTalkDTADb 資料庫太大,可能會對 TDDS 將數據從 MessageBox 資料庫移至 BizTalkDTADb 資料庫的能力產生負面影響。
TrackingData 數據表中的成長可能會導致節流啟動,進而影響可持續的運行時間輸送量。