2013-03-26 103 views
1

我正在使用SqlServer 2008R2,我需要以非常快的速度加载9亿条记录。

VARCHAR(20)
VARCHAR(10)
VARCHAR(50)
VARCHAR(15)
VARCHAR(20)
VARCHAR(10)
VARCHAR(4)
VARCHAR(3)
VARCHAR(10)
日期时间
日期时间
日期时间
日期时间
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)

(I具有各种格式,有的可达数据的100列 - 在数据的总221GB加载)

SqlServer批量插入逻辑

的问题是,该数据来自一个古老的OS390,如果日期为null,他们将它发送的文本文件中像99999999

什么是将这一数据为空的最佳方法?在Oracle中,您可以将逻辑放入格式中,您可以使用BCP来实现吗?或者是使用SSIS同时加载和转换的最快方法?或与触发器或东西?

作为文本加载,然后在数据库中转换我不认为是由于数据量的选项。

+0

你想加载这个速度有多快?我只用一个简单的设置(8个线程使用SqlBulkCopy流入堆表)以430GB /小时的速度加载数据,所以您可能实际上得到了一个临时表。 – usr 2013-03-26 14:15:03

+0

我们必须在15分钟内加载221GB。生产服务器将有至少180GB RAM,32核心,快速磁盘等。暂存表的问题将是将数据插入到最终表中的时间。以及需要临时磁盘空间来存储两个数据副本。你能否提供更多关于你如何加载你所做的内容的细节? – Luke 2013-03-26 15:21:42

回答

0

您可以随时使用.NET客户端应用程序以任何方式转换数据。我刚刚以430GB /小时的数据量加载了一个简单的设置:

我刚创建了8个.NET线程,并使用SqlBulkCopy以10m行批次流数据。每个线程插入到它自己的堆表中。这是最简单的设置。这在运行SQL Server的4 * 2 Core i7桌面上运行在同一台机器上。 SQL有大约50%的CPU使用率,我的应用程序有另外50%。因此,通过使用两台机器和一个快速网络,吞吐量可以轻松增加一倍。

这允许您将最终数据直接插入到目标表(理想情况下是分区的,以便您可以加载到单独的分区中)。

+0

谢谢我们将尝试一下。看看我们能得到什么样的速度。 – Luke 2013-03-27 17:25:37