You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何降低Kingswaysoft运行速度以避免集成崩溃?

解决Dataverse导入速度过快导致集成崩溃的问题

背景与现有尝试

需要将SQL数据库中255行数据导入Dynamics 365 Dataverse表,Kingswaysoft默认每秒处理1条的速度会导致Dynamics与遗留系统的集成崩溃,且生产系统无法关闭集成。

已做尝试:

  • 添加Script Component并使用以下代码,试图限制为每5秒处理1条,但仅阻塞了ClientGroup Inner Join和Script Component步骤,未达预期:
public override async void Input0_ProcessInputRow(Input0Buffer Row)
{
    Thread.Sleep(5000);
}
  • 已关闭CRM Destination的多线程设置,将批量大小设为1。

编辑:完整数据流为:SQL数据源 → Lookup组件 → ClientGroup Inner Join → Script Component → CRM Destination

可行的降速方法

1. 修正Script Component的延迟逻辑

当前代码用async void搭配同步的Thread.Sleep,会导致SSIS线程处理异常,延迟未作用到下游输出。改成以下两种方式之一:

  • 同步处理(确保组件为同步模式):
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    System.Threading.Thread.Sleep(5000);
}
  • 异步处理(将组件设为异步模式):
public override async Task Input0_ProcessInputRowAsync(Input0Buffer Row)
{
    await Task.Delay(5000);
}

设置为异步模式后,每一行处理完成后会先延迟,再向下游的CRM Destination输出,能真正控制每行的处理间隔。

2. 利用Kingswaysoft组件自带节流配置

检查CRM Destination组件的属性设置:

  • 部分版本的Kingswaysoft组件支持请求间隔(Request Interval),直接设置每次Dataverse请求之间的延迟毫秒数(比如5000),无需额外代码。
  • 确认是否有批次间隔设置,即使批量大小设为1,也能强制每批次(单条)之间等待指定时间。

3. 控制流循环逐行处理

将数据流拆分为控制流循环,每次仅处理1条数据:

  1. 创建变量记录已处理行数(初始值0)。
  2. 用While循环作为控制流容器,循环条件为已处理行数 < 255。
  3. 循环内依次执行:
    • 数据流任务:通过变量过滤,从SQL读取1条未处理的数据,导入Dataverse。
    • 脚本任务:执行System.Threading.Thread.Sleep(5000)实现延迟。
    • 变量赋值任务:将已处理行数加1。

4. SQL查询层面添加延迟

在SQL数据源的查询中,配合控制流逐行读取并添加延迟:

SELECT * 
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY [主键字段]) AS RowNum
    FROM [源表名]
) t
WHERE RowNum = ? -- 绑定控制流中的行数变量
WAITFOR DELAY '00:00:05'

这种方式能确保每读取一行就等待5秒,再进入后续数据流处理。

关键注意点

从数据流结构来看,延迟逻辑必须作用于进入CRM Destination前的每一行。如果Script Component是同步模式,上游的Lookup和Join会先处理完所有255行数据,再逐个延迟输出,起不到节流效果——因此必须将Script Component设为异步,让每行处理后立即延迟,再向下游传递。

内容的提问来源于stack exchange,提问作者GalaxyWolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:16:17