SSIS与KingswaySoft处理Dynamics CRM大JSON返回值报错求助
搞定SSIS处理Dynamics CRM大JSON的缓冲区溢出问题
为啥会出这问题
SSIS默认的缓冲区内存分配有上限,哪怕你调大了列的长度,单缓冲区能承载的总数据量还是有限,230多万字符的大JSON直接塞进去就超了阈值。
直接能用的解决办法
1. 改SSIS数据流的缓冲区参数
- 选中数据流任务,右键点「属性」
- 找到
DefaultBufferMaxRows:把默认的10000往下调,比如改成1000甚至100,减少单次加载的行数,给大JSON腾内存 - 找到
DefaultBufferSize:最大能设到104857600(也就是100MB),往上调,但别超过你机器的可用内存,不然容易卡 - 另外,所有涉及这个JSON列的组件,列类型必须设成
DT_NTEXT,别用DT_STR或DT_WSTR,这俩有长度上限,DT_NTEXT才是专门存超大文本的
2. 调KingswaySoft组件的输出配置
- 打开KingswaySoft的CRM操作组件,找到输出列设置
- 把JSON列的类型改成
DT_NTEXT,别选固定长度的字符串 - 看看组件有没有「大文本支持」的开关(部分版本有),有的话直接打开
3. 拆分数据(实在不行就用这招)
如果上面的方法还是顶不住,就在CRM的WebApi那边做拆分:
- 把一次性返回的大JSON改成分页返回,SSIS分批接收后再合并处理
- 或者在CRM里先把大JSON存到附件字段里,SSIS去读附件内容,别让超大字符串直接走数据流缓冲区
4. 升级KingswaySoft版本
旧版本的KingswaySoft可能对大字段处理有bug,直接更到最新版,很多这类问题官方已经修复了
测试建议
先拿小数据测流程通不通,没问题再逐步加大JSON的体积,直到能处理目标大小,别一开始就怼全量数据,容易白忙活。
内容的提问来源于stack exchange,提问作者Mpresko
相关产品推荐
相关产品推荐

