Sql server 如何使SSIS进程运行得更快?
编辑 此问题已在SO上关闭,并在ServerFault上重新发布 我在SSIS中有一个每日ETL流程,用于构建我的仓库,以便我们能够提供每日报告 我有两台服务器——一台用于SSI,另一台用于SQL Server数据库。SSIS服务器(SSIS-Server01)是一个8CPU、32GB RAM的机箱。SQL Server数据库(DB Server)是另一个8CPU、32GB RAM的机箱。两者都是VMWare虚拟机 在其过于简化的形式中,SSI从DB服务器上的一个表中读取1700万行(约9GB),将其解压到40800万行,进行一些查找和大量计算,然后将其聚合回大约800万行,每次写入同一DB服务器上的一个全新表中(然后将该表移动到分区中,以提供每日报告) 我有一个循环,一次处理18个月的数据—总共10年的数据。我根据对SSIS服务器上RAM使用情况的观察选择了18个月—在18个月时,它会消耗27GB的RAM。如果超过这个值,SSIS就会开始缓冲到磁盘,性能就会下降 我使用8条并行路径发送数据,以最大限度地提高资源利用率。在开始聚合工作之前,我会进行联合 下面是来自SSIS服务器的任务管理器图 下面是另一个显示8个独立CPU的图表 从这些图片中可以看到,随着越来越多的行被读取和处理,内存使用率慢慢增加到27G左右,但是CPU使用率保持在40%左右 第二个图表显示,我们只使用了8个CPU中的4个(有时是5个) 我试图让进程运行得更快(它只使用了可用CPU的40%)Sql server 如何使SSIS进程运行得更快?,sql-server,performance,ssis,sql-server-2008-r2,etl,Sql Server,Performance,Ssis,Sql Server 2008 R2,Etl,编辑 此问题已在SO上关闭,并在ServerFault上重新发布 我在SSIS中有一个每日ETL流程,用于构建我的仓库,以便我们能够提供每日报告 我有两台服务器——一台用于SSI,另一台用于SQL Server数据库。SSIS服务器(SSIS-Server01)是一个8CPU、32GB RAM的机箱。SQL Server数据库(DB Server)是另一个8CPU、32GB RAM的机箱。两者都是VMWare虚拟机 在其过于简化的形式中,SSI从DB服务器上的一个表中读取1700万行(约9GB
我如何让这个过程更高效地运行(最少的时间,最多的资源)?您以前是否尝试过将18个月的处理进一步分成2个或3个以上的批?当然,除非您的分区方案需要将所有18个月都放在该分区中——但接下来,看看您是如何以及为什么使用该方案对数据进行分区的,这将是一件很奇怪的事情。而且,打破分区方案仍然可以如果在重新创建索引/约束时进行了验证,则批处理 根据我的经验,我曾经不得不创建一个处理5000万到6000万条记录的作业,尽管源文件来自数据文件,目标文件位于服务器中的一个表中,但事实证明,将它们分批处理要比一次处理所有记录快得多 您是否担心性能急剧下降,因为这是一个高度事务性的数据库?如果是,您是否碰巧有任何数据冗余供您使用 [编辑#01] Re:评论#01:如果我很困惑的话,很抱歉;我的意思是,在处理记录的计划日期,最好让ssis包的计划作业以一定的间隔运行(因此测试处理1个月的时间,并取平均值并为其提供时间缓冲),一次处理一两个月(如果可能)然后在顶部设置一个额外的任务来计算/确定要处理的月份 举个例子: <仅假设两个月内完成不到一小时> [预定运行]:01:00 [ssis任务01]获取当前时间的小时值。如果小时=1,则设置monthtoprocessstart=1和monthtoprocessend=2 [ssis任务02等]:处理月数在范围内的数据(monthtoprocessstart和end,处理年份)
如果这更让人困惑,请告诉我,这样我就可以删除编辑。谢谢。在一天结束时,所有处理都受四个因素之一的约束
- 记忆
- 中央处理器
- 圆盘
- 网络