提高大型数据集的 SSIS 包插入/删除速度(或者可以吗?



我是SSIS的新手,我们有一个客户需要处理相当大的数据集。

一个表包含超过 1.9 亿行。每个月,他们都会用CSV文件(大小约为40GB)中的数据替换这些数据。这是作为 SSIS 包中的一个步骤完成的。

现在,他们只想替换特定日期(CSV 文件中的最小日期)之后的数据,因此他们只发送 2010 年及以后的数据,而不是从 1997 年开始发送数据。我们处理这个问题的方式是:

  1. 截断"temp_table"(SQL 语句任务)
  2. 从"data.csv"(平面文件源)读取所有数据
    • 组 播
      1. 将所有数据插入"temp_table"(OLE DB 目标)
        • 这是每批 75k 行的批量完成
      2. 将变量"minDate"设置为"data.csv"(脚本组件)中的最小日期值
  3. 删除"destination_table"中日期值大于"minDate"的所有行(SQL 语句任务)
    • 这是每批 100k 行的批量完成
  4. 插入从"temp_table"到"destination_table"的所有行(OLE DB 源 -> OLE DB 目标)
    • 这是每批 75k 行的批量完成

使用这种方法,我们以平均 60k 行/秒的速度将数据插入到"temp_table"。

"destination_table"中的删除阶段删除 ~40k 行/秒,第二个插入阶段(从"temp_table"到 "destination_table")以 ~80k 行/秒的速度运行。

这是此类工作的平均速度吗?是不是太慢了?你会怎么做来改进它?

博士

我们使用 SSIS 以每分钟 ~4-500 万行的速度将数据插入到 MSSQL 数据库表中,并以每分钟 ~250 万行的速度删除数据。这是可以接受的吗?

行/秒平均值取决于每种情况。要知道它是否足够,我们必须知道您的最终表是如何配置的,哪些是数据库服务器的硬件配置......

为了提高性能,我们总是首先看到 I/O。如果我们能用书面形式做某事或在阅读中做某事......

在写中,我们可以做这样的事情:使用名为"平衡数据分发服务器"的 SSIS 组件,该组件使用处理器的强大功能进行并行写入。使表分区在多个磁盘中以同时写入数据。

在读取过程中,您可以将文件分区为多个文件以同时读取。

我不知道我是否帮过你...但这就是我的想法。

最新更新