我对 SSIS 很陌生,我们有一个客户需要处理相当大的数据集。
一张表有超过 1.9 亿行。每个月,他们都会用 CSV 文件(大约 40GB 大小)中的数据替换这些数据。这是作为 SSIS 包中的一个步骤完成的。
现在他们只想在某个日期(CSV 文件中的最小日期)之后替换数据,因此他们不会一直发送 1997 年的数据,而是只发送 2010 年及以后的数据。我们处理这个问题的方法是:
- 截断“temp_table” (SQL 语句任务)
- 从“data.csv” (平面文件源)读取所有数据
- 组播
- 将所有数据插入“temp_table” (OLE DB 目标)
- 这是分批完成的,每批 75k 行
- 将变量“minDate”设置为“data.csv” (脚本组件)中的最小日期值
- 将所有数据插入“temp_table” (OLE DB 目标)
- 组播
- 删除“destination_table”中日期值大于“minDate”的所有行(SQL 语句任务)
- 这是分批完成的,每批 100k 行
- 将所有行从“temp_table”插入到“destination_table” (OLE DB 源 -> OLE DB 目标)
- 这是分批完成的,每批 75k 行
使用这种方法,我们以 60k 行/秒的平均速率将数据插入“temp_table”。
“destination_table”中的删除阶段删除约 40k 行/秒,第二个插入阶段(从“temp_table”到“destination_table”)以约 80k 行/秒的速度运行。
这是这种工作的平均速度吗?是不是太慢了?你会做些什么来改进它?
TL;博士
我们使用 SSIS 以每分钟约 4-5 百万行的速度将数据插入 MSSQL 数据库表,并以每分钟约 250 万行的速度删除数据。这可以接受吗?