3

我对 SSIS 很陌生,我们有一个客户需要处理相当大的数据集。

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

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

  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 行/秒的速度运行。

这是这种工作的平均速度吗?是不是太慢了?你会做些什么来改进它?

TL;博士

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

4

1 回答 1

1

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

为了提高性能,我们总是首先看到 I/O。如果我们可以写一些东西或者读一些东西……

在写入时,我们可以执行以下操作:使用名为“Balanced Data Distributor”的 SSIS 组件,该组件利用处理器的能力进行并行写入。将您的表分区在多个磁盘中以同时写入数据。

在读取时,您可以将文件划分为多个文件以同时读取。

我不知道我是否帮助过你……但我就是这么想的。

于 2016-12-19T17:16:34.847 回答