2
批量插入时间差异很大
因此,我有一个简单的批量插入过程,可以从暂存表中获取数据并将其移入我们的数据集市。 该过程是一个简单的数据流任务,默认设置为“每批行数”,选项为“ tablock”和“无检查约束”。 桌子很大。587,162,986,数据大小为201GB,索引空间为49GB。该表的聚集索引为。 CREATE CLUSTERED INDEX ImageData ON dbo.ImageData ( DOC_ID ASC, ACCT_NUM ASC, MasterID ASC ) 主键是: ALTER TABLE dbo.ImageData ADD CONSTRAINT ImageData PRIMARY KEY NONCLUSTERED ( ImageID ASC, DT_CRTE_DOC ASC ) 现在我们遇到了一个问题,即BULK INSERT通过SSIS的运行速度非常慢。1小时插入一百万行。填充表的查询已经排序,并且要填充的查询需要不到一分钟的时间才能运行。 当进程运行时,我可以看到查询正在等待BULK插入,这需要5到20秒的时间,并且显示的等待类型为PAGEIOLATCH_EX。该过程一次只能执行INSERT大约一千行。 昨天,在针对我的UAT环境测试此过程时,我遇到了同样的问题。我运行了几次该过程,试图确定此缓慢插入的根本原因是什么。然后突然之间不到5分钟就开始运行了。所以我又运行了几次,结果都一样。等待5秒或更长时间的散装插入物数量也从数百下降到大约4。 现在,这令人困惑,因为这并不像我们的活动有所减少。 CPU持续时间很短。 速度较慢的时间似乎较少等待磁盘。 实际上,磁盘延迟会在5分钟以内运行该进程的时间内增加。 在此过程运行不佳的时期,IO更低。 我已经检查过了,并且文件没有增长,因为文件仅占70%。日志文件仍有50%可用。数据库处于简单恢复模式。DB仅具有一个文件组,但分布在4个文件中。 所以我想知道的是:为什么我看到那些大批量插入的等待时间如此之长。B:发生了什么魔术使它运行得更快? 边注。今天又像废话一样运行。 UPDATE,当前已分区。但是,这样做的方法充其量只是愚蠢的。 CREATE PARTITION SCHEME …