在SSIS包装中是否有"每批次"和"最大插入承诺尺寸"的重新分配?

Har*_*ngh 7 sql-server ssis business-intelligence sql-server-2012 ssis-2012

我有SSIS包,它将包含1000万条记录的2.5 GB数据导出到Sql Server数据库中,该数据库有10个分区,包括PRIMARY FILE GROUP.

更改默认最大插入提交大小之前,即"2147483647"和每批行.使用快速加载选项完成转换需要7分钟.

但是在用一些公式来衡量一些不错的价值之后,执行只用了2分钟就完成了.

FYI- DefaultMaxBufferRowsDefaultMaxBufferSize 分别是scenorio中的默认值,即10000和10 MB.

计算最大插入提交大小每批行数 使用下面的计算.

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
)
Run Code Online (Sandbox Code Playgroud)

2)每批行数=每个记录的packate_size /字节数= 32767/1038 =约32.

3)最大插入提交大小=包大小*事务数= 32767*100 = 3276700(包装大小和数量事务变量可根据需要改变)

题 :

  • 每批次的行数和最大插入提交大小是否相关?由于存档文章中没有提到用于调整DFT(数据流任务)执行的信息.

  • 这些配置是否与DefaultBuffermaxzie和
    DefualtBuffermaxrows 一起使用?如果是,如何?

Fer*_*pux 5

这些参数仅指DFT OLE DB目标.OLE DB目标发出insert bulk命令.这两个参数以下列方式控制它:

  • 最大插入提交大小 - 控制单个批处理中插入的数据量.因此,如果您将MICS设置为5000并且您有9000行并且在前5000个结果中遇到错误,则将回滚整批5000.MISC等于BULK INSERT transact-sql命令中的BATCHSIZE参数.
  • 每批行数 - 仅提示查询优化器.应将此值设置为实际预期的行数.RPB等于BULK INSERT transact-sql命令的ROWS_PER_BATCH参数.
    为MICS指定值将产生一些影响.每个批处理都会复制到事务日志中,这会使其快速增长,但可以在每个批处理后备份该事务日志.此外,如果目标表上有索引,则拥有大批量将对内存产生负面影响,如果您没有使用表锁定,则可能会有更多阻塞.

BULK INSERT(Transact-SQL) -关于此命令的MS文章.

DefaultBuffermaxsizeDefaultBuffermaxrows控制DFT内部的RAM缓冲区管理,并且不会干扰上面提到的选项.