代码之家  ›  专栏  ›  技术社区  ›  Chris McCall

在SQL Server中将数据水平地分区到“存档”中需要几个月才能执行?

  •  2
  • Chris McCall  · 技术社区  · 14 年前

    如果客户在某个时间段内没有帐户活动,我的组织中有一个项目正在运行,用于将客户数据和所有相关记录(账单交易等)从一个数据库移动到另一个数据库。

    所有表中的总行数以百万计。大概有1亿行,所有的表都在一起。模式或多或少是规范化的。项目的设计者已经决定让SSIS来执行这个操作,初步分析显示 5个月 执行时间。

    基本上,过程是:

    1. 填充与源数据库具有相同架构的“存档”数据库
    2. 从源数据库中删除原始行

    如有必要,我可以提供更多细节。我想知道的是,SSIS是正确的方法吗?是否有某种规范化的方法来移动大量的数据?有没有常见的性能缺陷需要避免?

    我简直不敢相信这需要几个月的时间,我想知道是否还有其他事情需要我们去调查。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Remus Rusanu    14 年前

    SSIS只是一个工具。你可以在ssis中写一个100行的传输,需要24小时,你可以写5个月,问题是你写的是什么(即ssis中的工作流),而不是ssis。

    没有任何特定于ssid的内容会指示“传输速度不能超过5个月”。

    可以实现这样一个任务的指导原则(逻辑划分数据,并行处理每个逻辑分区,消除处理之间的访问和更新争用,批量提交更改,不传输线上需要的更多数据,尽可能使用基于集的处理,能够挂起和恢复等)与其他技术(如果不是更好的话)一样,也依赖于SSIS。

    作为记录, ETL world speed record 大约每小时2兆字节。使用SSIS。事实上,我刚刚完成了130m行的数据传输,大约200GB的数据传输,花费了大约24小时(我很懒惰,没有拍摄ETL记录)。

    对于开发、测试和部署,我可以理解5兆,但对于实际处理,我不能理解5兆。这就像每秒7行,真的很糟糕。

        2
  •  1
  •   Mitch Wheat    14 年前

    如果只是删除记录,那么SSIS可能不是正确的选择。

    这可能很有趣: Performing fast SQL Server delete operations

    更新:正如Remus正确指出的那样,根据流的编写方式,ssis可以执行得很好,也可以执行得很差,而且(在高端系统上)有一些巨大的基准。但是对于只删除,有一些简单的方法,比如SQL代理作业批量运行TSQL删除。