簡介
本文檔介紹通過智慧聯絡人管理(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