这是我的情况:我包含了我能想到的尽可能多的细节,但如果您需要更多信息,请告诉我。我已经在网上搜索了一个小时左右,但没有找到任何可以解决我的具体问题的帖子,所以任何帮助(甚至是链接)都将不胜感激。
我正在编写一个数据流任务来对我的数据源执行 SCD 操作(使用任务工厂的 SCD 组件)。我正在通过极慢的连接从一个网络中的 Oracle 源加载到我的新服务器上的 SQL 源。
SCD 操作要求我从源和目标中提取数据,并比较两者。但是,这两个连接的相对速度给我带来了问题:SQL 源快了将近 10 倍,所以当旧服务器传输 1 时,数据流将从我的新服务器中提取 800 万条记录百万。
由于两个源汇集在一起并流经同一个 SCD 组件,当我达到 8m/1m 标记时,仍有 7m 行等待来自 SQL 源。据我了解,这 7m 行正在内存中等待通过 SCD 进行处理。
我收到 SSIS 调试主机已停止工作的错误消息,并且系统无法向缓冲区写入更多新行。这些消息位于不同的组件和步骤上(我有大约 30 个表具有相同的情况),所以我非常有信心这是我可用内存的一般问题,而不是我包中代码的特定问题。此外,如果我运行单个表甚至表组,该包将始终成功 - 它仅在尝试并行加载某些表时失败。
到目前为止采取的步骤:
1) 将正在加载的表拆分到多个顺序容器/子包中,以减轻内存压力:这主要是有效的,但会将整体执行速度减慢到极长的时间。此外,有些表在达到一定限制时仍然会抛出 SSIS Debug Host 错误(下)。
2)添加一个脚本组件来计算源上的哈希值(如本文所述),然后我可以使用它来确定记录是否已更改,而不是比较每一列。这也意味着我不需要从目标表中提取所有列,我认为这将有助于解决内存短缺问题。
继续存在的问题:
一旦行数不平衡达到极端水平,我仍然会崩溃,即使只从源和目标中提取几个(6 个日期时间,3 个整数,2 个数字(38,0))列。这发生在没有上述哈希值的表上。故障点的数据流屏幕截图如下:注意行数。
关于下一步做什么的想法: 我想知道是否有办法减慢 SQL 源的速度,使其以与另一个相同的速度提取记录?任何想法如何实现这一点?
完整的错误描述: 1) SSIS 调试主机已停止工作(弹出窗口)。
Problem signature:
Problem Event Name: APPCRASH
Application Name: DtsDebugHost.exe
Application Version: 2011.110.2100.60
Application Timestamp: 4f35e2b2
Fault Module Name: clr.dll
Fault Module Version: 4.0.30319.18449
Fault Module Timestamp: 528fdc93
Exception Code: c0000005
Exception Offset: 0010d0aa
OS Version: 6.2.9200.2.0.0.272.7
Locale ID: 1033
Additional Information 1: 9336
Additional Information 2: 9336482019c99e3f312ddc2ccd6c9a04
Additional Information 3: b33b
Additional Information 4: b33bc67c4e950cb436b9dbebdd26abc8
2) SSIS 错误信息:
[TF Dimension Merge Slowly Changing Dimension] Error: Internal error (Exception adding key to cache) in ProcessInput sending row to cache.
[TF Dimension Merge Slowly Changing Dimension] Error: Internal error (Exception adding key to cache) in ProcessInput adding rows to the cache.
[TF Dimension Merge Slowly Changing Dimension] Error: Internal error (Exception adding key to cache) in ProcessInput.
[TF Dimension Merge Slowly Changing Dimension] Error: Internal error (Unexpected exception in OrderedHashList.Remove removing entry from internal structures: Exception of type 'System.OutOfMemoryException' was thrown.) in ProcessKey thread dequeueing a key (03720200).
[TF Dimension Merge Slowly Changing Dimension] Error: Internal error (Unexpected exception in OrderedHashList.Remove removing entry from internal structures: Exception of type 'System.OutOfMemoryException' was thrown.) in ProcessKey thread dequeueing a key (28740100).
[TF Dimension Merge Slowly Changing Dimension] Error: Internal error (Internal error (Unexpected exception in OrderedHashList.Remove removing entry from internal structures: Exception of type 'System.OutOfMemoryException' was thrown.) in ProcessKey thread dequeueing a key (03720200).) in ProcessCache_Thread_ProcessKey.
[TF Dimension Merge Slowly Changing Dimension] Error: Internal error (Internal exceptions encountered.) in ProcessInput.
[TF Dimension Merge Slowly Changing Dimension] Error: Internal error (Internal error (Unexpected exception in OrderedHashList.Remove removing entry from internal structures: Exception of type 'System.OutOfMemoryException' was thrown.) in ProcessKey thread dequeueing a key (28740100).) in ProcessCache_Thread_ProcessKey.
[TF Dimension Merge Slowly Changing Dimension] Error: Internal error (Internal exceptions encountered.) in ProcessInput.
系统详情:
视窗服务器 2012
安装内存(RAM):64.0 GB
系统类型:64 位操作系统,基于 x64 的处理器
SSIS 2012 从 Visual Studio 环境执行(通过 SQL Server 代理按计划作业运行时也会出现问题