这是我的第一个问题,我搜索了来自不同网站的大量信息,但其中没有任何信息存在。
问题: 每天我正在加载一个平面文件,其中包含在SQL Server 2005中的预定作业中执行的SSIS包,但它花了太多时间(如2 1/2小时),文件只有300行,其文件大小为50 MB 。这让我发疯,因为这会影响我服务器的性能。
这是场景: - 我的包只是一个数据流任务,有一个平面文件源和一个OLE DB目的地,这就是全部! - 数据访问模式设置为快速加载。 - 表中只有3个索引,并且是非聚集的。 - 目前我的目标表有366,964,096条记录和32列 - 我还没有在任何Output列中设置FastParse。(想先尝试别的东西)
所以我刚开始做一些测试:
-Rebuild /重新组织目标表中的索引(它们的位置过于分散),但这对我没有多大帮助 - 处理了另一个具有相同结构的表,但是对所有索引进行了处理并执行了作业,并将SSIS包加载到这个新表中,并且它只需要1分钟就可以了!
所以我很困惑,有什么我想念的吗? - SSIS包是否将所有大表写入Buffer并将其写入磁盘?或者为什么BIG在时间上有所不同?
- 是否影响插入时间?
- 我应该将文件作为临时表加载到这个新表中,然后对订阅记录的目标表执行BULK INSERT吗?因为我虽然数据FLOW任务比BULK INSERT快得多,但此时我现在还不知道。
提前问候。
答案 0 :(得分:1)
我可能会关注的一件事是,如果大表有任何触发器导致它在插入时变慢。此外,如果聚集索引位于需要在加载期间重新排列数据的字段上,那么这也可能导致问题。
在SSIS包中,使用合并连接(需要排序)会导致速度变慢,但是根据您的描述,您似乎没有这样做。我提到它只是为了你这样做而没有提到它。
答案 1 :(得分:0)
如果在没有索引的情况下工作正常,也许你应该研究那些。有哪些数据类型?那里有多少?也许你可以发布他们的定义?
您还可以查看索引的填充因子 - 尤其是聚簇索引。填充因子较高可能会导致插入过多的IO。
答案 2 :(得分:0)
好吧我用Sam告诉我的另一个填充因子(80%)重建索引,时间显着下降。花了30分钟而不是近3小时! 我将继续测试以微调数据库。此外,我没有必要创建一个聚集索引,我猜与聚集时间将下降更多。
感谢所有人,希望这对同样情况的人有所帮助。