2012-03-29 52 views
0

我有一个SSIS包,它假设有100,000个记录循环在他们和每一个保存到少数表的细节。 它工作正常,直到它到达3000条记录附近的某处,然后视觉工作室崩溃。此时devenv.exe使用了大约500MB,只处理了3000行。 我敢肯定,问题不在于特定的记录,因为它总是发生在不同的3K记录上。 我有一个很好的计算机与2 GIG的RAM可用。 我在使用SSIS 2008.SSIS崩溃后的几个记录

任何想法可能是什么问题?

谢谢。

+1

它在dtexec/dtexecui中做同样的事吗? – 2012-03-29 12:52:48

+0

我没有检查。我使用设计器来运行它。 – 2012-03-29 12:56:23

+1

当它崩溃时它会抛出什么错误?你可以发布控制流的截图,然后发布数据流? – billinkc 2012-03-29 13:17:31

回答

0

尝试增加数据流任务的默认缓冲区大小。这里给出

实施例:http://www.mssqltips.com/sqlservertip/1867/sql-server-integration-services-ssis-performance-best-practices/

最佳实践#7 - DefaultBufferMaxSize和DefaultBufferMaxRows

正如我在,执行树用于存储传入创建 缓冲器中的 “#6最佳实践” 中说行和执行转换。那么 它创建了多少个缓冲区?一个 缓冲区有多少行?它如何影响性能?

创建的缓冲区数取决于缓冲区中有多少行适合缓冲区,以及有多少行适合缓冲区,具体取决于其他几个因素。第一个考虑因素是估计的行大小,即 记录中所有列的最大大小的总和。第二个考虑因素是数据流任务的DefaultBufferMaxSize属性 。此属性指定缓冲区的默认最大大小 。 的默认值是10 MB和其上部和下部 边界由SSIS的两个内部特性,这是 MAXBUFFERSIZE(100MB)MinBufferSize(64 KB)限制。这意味着缓冲区的大小为 可以小到64 KB,大到100 MB。第三个 因子是DefaultBufferMaxRows它又是数据流的属性 任务,它指定了缓冲区中的默认行数。其 默认值为10000

虽然SSIS确实在调谐为以 创建缓冲器的最佳数量,如果该大小超过 DefaultBufferMaxSize这些性能良好的作业,然后它在缓冲降低的行。对于 更好的缓冲区性能,你可以做两件事。首先,您可以从源中删除 不需要的列,并适当地在每列 中设置数据类型,特别是如果源是平面文件。这将使 能够在缓冲区中容纳尽可能多的行。 其次,如果您的系统具有足够的可用内存,则可以调整 这些属性以拥有少量大缓冲区,这可以提高性能。请注意,如果您将这些 属性的值更改为页面假脱机(参见最佳实践#8) 开始的点,则会对性能产生负面影响。因此,在为这些属性设置值 之前,请先在您的环境中进行全面测试,然后 对这些值进行适当设置。

您可以启用BufferSizeTuning事件的日志记录,以了解有多少 行缓冲区包含并可以监视“缓冲区后台” 性能计数器,看看是否SSIS已经开始页面后台。我将在本系列的下一个 提示中详细介绍事件记录和性能计数器。