我有SSIS包,它将包含1000万条记录的2.5 GB数据导出到Sql Server数据库中,该数据库有10个分区,包括PRIMARY FILE GROUP。
在更改默认最大插入提交大小之前,即“2147483647”和每批次。使用快速加载选项完成转换需要7分钟。
但是在用一些公式来衡量它的价值之后,执行只用了2分钟就完成了。
FYI- DefaultMaxBufferRows & DefaultMaxBufferSize 是两个scenorio中的默认值,分别为10000和10 MB。
计算最大插入提交大小& 每批次 使用以下calucation。
1)来自被转移来源的记录的计算长度。大约1038个字节。
CREATE TABLE [dbo].[Game_DATA2](
[ID] [int] IDENTITY(1,1) NOT NULL, -- AUTO CALCULATED
[Number] [varchar](255) NOT NULL, -- 255 bytes
[AccountTypeId] [int] NOT NULL, -- 4 bytes
[Amount] [float] NOT NULL,-- 4 bytes
[CashAccountNumber] [varchar](255) NULL, -- 255 bytes
[StartDate] [datetime] NULL,-- 8 bytes
[Status] [varchar](255) NOT NULL,-- 255 bytes
[ClientCardNumber] [varchar](255) NULL -- 255 bytes
)
2)每批次的行=每条记录的packate_size / bytes = 32767/1038 =约32
3)最大插入提交大小=包大小*事务数= 32767 * 100 = 3276700 (包装大小和数量交易是可变的,可根据要求改变)
问题:
每批次的行数和最大插入提交大小是否相关?由于存档article中没有提及用于调整DFT(数据流任务)执行的信息。
这些配置是否与DefaultBuffermaxzie和
一起使用
DefualtBuffermaxrows?如果是的话怎么样?
答案 0 :(得分:5)
这些参数仅指DFT OLE DB Destination。 OLE DB Destination发出insert bulk
命令。这两个参数以下列方式控制它:
BULK INSERT (Transact-SQL) - MS Article关于此命令。
DefaultBuffermaxsize 和 DefaultBuffermaxrows 控制DFT内部的RAM缓冲区管理,并且不会干扰上述选项。
答案 1 :(得分:1)
亲爱的Harsimranjeet Singh;
根据我的个人经验,Rows_Per_Batch确定oledb_destination必须从DFT组件接收的每批次的行数,而DefualtBuffermaxrows确定DFT的bacth大小,因此DefualtBuffermaxrows取决于SSIS服务器的规范,Rows_Per_Batch依赖于目标服务器和每个必须设置他们的条件。
此外,Maximum_Insert_Commit_Size确定当命中数字时的记录数,然后在日志文件中写入并提交;减少这个数字,使得增加的计数指的是日志,这是不好的,但它导致MSDB(系统数据库)没有膨胀,这对提高性能非常有利。
另一点是DefualtBuffermaxrows和DeafultBufferSize之间的关系,它们必须一起设置。 DefualtBuffermaxrows乘以每条记录的大小必须大约等于DeafultBufferSize,如果这个大于那么ssis减少到达那个并且如果它小于且小于最小缓冲区大小,则将其增加到触摸最小缓冲区大小。这些操作严重降低了包装的性能。
祝你好运!
答案 2 :(得分:1)
每批次行-此设置的默认值为-1,该值指定将所有传入行都视为一个批次。您可以更改此默认行为,并将所有传入的行分成多个批次。允许的值只能是正整数,它指定批处理中的最大行数。
最大插入提交大小-此设置的默认值为'2147483647'(4字节整数类型的最大值),它指定所有输入行在成功完成后将被提交一次。您可以为此设置指定一个正值,以指示将对那些记录数进行提交。您可能想知道,更改此设置的默认值将使数据流引擎的开销要多次提交。是的,的确如此,但是与此同时,它将释放事务日志和tempdb的压力,使其在进行大量数据传输时显着增长。
了解上述两个设置对于提高tempdb和事务日志的性能非常重要。例如,如果将“最大插入提交大小”保留为默认值,则在提取过程中,事务日志和tempdb将继续增长;如果传输大量数据,由于以下原因,tempdb很快将耗尽内存:这样您的提取将失败。因此,建议根据您的环境将这些值设置为最佳值。
注意:以上建议是在过去几年中与DTS和SSIS合作获得的经验的基础上做出的。但是如前所述,还有其他影响性能的因素,其中之一是基础架构和网络。因此,在将这些更改放入生产环境之前,您应该进行彻底的测试。