目錄

簡介

背景資訊

採用元件

問題

解決方案

簡介

本文檔介紹通過智慧聯絡人管理(ICM)消息傳遞服務(MDS)消息可處理的最大資料量及其背後的體系結構。

背景資訊

使用ICM執行資料庫查詢時（使用dbworker.exe作為提供路由器與外部資料庫之間的介面的進程），存在可通過MDS消息處理的最大資料量。

結構化查詢語言(SQL)響應資料+資料庫工作進程(DBW)響應標頭的總數不能超過4096位元組。這是MDS消息的硬編碼限制。

採用元件

本檔案中的資訊是根據ICM版本11.6

問題

如果從SQL Server向dbw返回的資料太多，而dbw無法將其傳遞到路由器(RTR)，則會生成錯誤條件，類似於以下條件：

06:33:38:639 ra-dbw跟蹤：將查詢請求排隊

06:33:38:644 ra-dbw跟蹤：DBWorker執行緒4（ID 5612表：Stores_Receiving_BT.SRDB_NEW）：收到的請求：transactionID 14583170

06:33:38:658 ra-dbw跟蹤：DBWorker執行緒4(ID 5612),transactionID 14583170，嘗試讀取記錄：

06:33:38:679 ra-dbw跟蹤：DBWorker執行緒4(ID 5612),transactionID 14583170，成功。(..)

06:33:38:735 ra-dbw跟蹤：DBWorker transactionID 14583170，失敗！result=10

06:33:38:745 ra-dbw跟蹤：將查詢請求排隊

"10" — 表示從SQL Server返回到dbw的資料太多，而dbw無法將其傳遞到RTR

為了列印錯誤，使用以下跟蹤級別：

通過Portico將dbw跟蹤級別設定為3（跟蹤級別3隻在Cisco TAC的建議下使用），並且通過rtrace工具對RTR使用此跟蹤級別(c:\icm\bin):

以下是DBW進程如何形成MDS消息的示例：

02:22:01:273 ra-dbw跟蹤：DBWorker執行緒2(ID 15100表：ICM_lookup_1):收到的請求：transactionID 3

02:22:01:273 ra-dbw跟蹤：DBWorker執行緒2(ID 15100),transactionID 3，嘗試讀取記錄：

02:22:01:273 ra-dbw跟蹤：DBWorker執行緒2(ID 15100),transactionID 3，成功。

02:22:01:273 ra-dbw跟蹤：MDS:正在進入MDSAllocBuffer

02:22:01:273 ra-dbw跟蹤：SQLConnection::SetupColumnData:列1的列資料長度= 5

02:22:01:273 ra-dbw跟蹤：SQLConnection::SetupColumnData:列2的列資料長度= 0

02:22:01:273 ra-dbw跟蹤：SQLConnection::SetupColumnData:第3列的列資料長度= 0

02:22:01:273 ra-dbw跟蹤：MDS:正在進入MDSSendInput02:22:01:273 ra-dbw消息跟蹤：客戶端：dbw向MDS進程傳送消息。

EMT:  class=2 type=1 bodysize=116

MDS:  rsrvd=0 hdrsize=16 bodysize=100 src=56 dst=1 priority=high

MDS:  flags=02 { side_a } vtime=0006f03b seqno=0000 class=4 type=16

00000 03 00 00 00 00 00 00 00 00 00 |........|

00008 03 00 00 00 8e 13 00 00 |........|

00010 02 00 00 00 00 00 00 00 00 00 |........|

00018 00 00 00 00 00 00 00 00 00 00 |........|

00020 00 00 00 00 05 00 38 30 |......80|

00028 31 30 34 00 8c 13 00 00 |104.....|

00030 02 00 00 00 00 00 00 00 00 00 |........|

00038 00 00 00 00 00 00 00 00 00 00 |........|

00040 00 00 00 00 00 00 00 00 00 00 |........|

00048 8d 13 00 00 02 00 00 00 |........|

00050 00 00 00 00 00 00 00 00 00 00 |........|

00058 00 00 00 00 00 00 00 00 00 00 |........

00060 00 00 00 00

在此示例中，對已配置的表執行SQL查詢的結果是3列，所有列在資料庫中都具有VARCHAR(50)型別。

響應包含第1列中的5個位元組資料，以及其它2列中的0個位元組資料。

基於該響應，dbw形成MDS消息，其中每列封裝在由24位元組報頭+ 2位元組長度+ PAYLOAD + OFFSET組成的欄位中。

如果列不包含資料（例如Length = 0），它仍將佔用：24位元組標頭+ 2位元組長度+ 2位元組OFFSET = 28位元組。

解決方案

要解決此情況，您需要從表/配置中刪除未使用的列，或者收縮列名稱，或者收縮列資料大小。

相關文檔：

https://www.cisco.com/c/en/us/support/docs/customer-collaboration/unified-contact-center-enterprise/116215-configure-dblookup-00.html