简介
本文档介绍通过智能联系管理(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_Reception_BT.SRDB_NEW):已接收请求:事务ID 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,失败!结果=10
06:33:38:745 ra-dbw跟踪:对查找请求排队
“10” — 表示从SQL Server向dbw返回了太多数据,而dbw无法将其传递到RTR
要打印错误,请使用此跟踪级别:
dbw trace-level通过Portico(trace level 3仅在思科TAC的建议下使用)到3,此trace-level用于通过rtrace工具(c:\icm\bin)进行RTR:
以下是DBW进程如何形成MDS消息的示例:
02:22:01:273 ra-dbw跟踪:DBWorker线程2(ID 15100表:ICM_lookup_1):已接收请求:事务ID 3
02:22:01:273 ra-dbw跟踪:DBWorker线程2(ID 15100),transactionID 3,尝试读取记录:
02:22:01:273 ra-dbw跟踪:DBWorker线程2(ID 15100),事务ID 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 |........|
00008 03 00 00 00 8e 13 00 00 |........|
00010 02 00 00 00 00 00 00 00 00 |........|
00018 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 |........|
00038 00 00 00 00 00 00 00 00 00 |........|
00040 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 |........|
00058 00 00 00 00 00 00 00 00 00 |........
00060 00 00 00 00
在本示例中,由于对已配置表执行SQL查询,因此有3列,所有列在DB中都具有VARCHAR(50)类型。
响应包含第1列的5个字节数据,其他2列的0个字节。
基于该响应dbw形成MDS消息,其中每列都打包在包含24字节报头+ 2字节长度+负载+ OFFSET的字段中。
如果列不包含数据,如长度= 0,它仍将占用:24字节报头+ 2字节长度+ 2字节偏移量= 28字节。
解决方案
要解决此方案,您需要从表/配置中删除未使用的列,或缩小列名,或缩小列数据大小。
相关文档:
https://www.cisco.com/c/en/us/support/docs/customer-collaboration/unified-contact-center-enterprise/116215-configure-dblookup-00.html