使用批量插入将文件插入到SQL Server 2008 R2

问题描述:

我试图使用批量方法向表(列数据类型:VARBINARY(MAX))插入一个500 MB的文件,SQL需要大约15分钟来插入文件。我有2GB内存,我的电脑是2核心,我正在使用SQL Server 2008 R2。使用批量插入将文件插入到SQL Server 2008 R2

我的问题:

  • 是正常需要15分钟! ,还是太长了?
  • 有没有更快的方法?

谢谢。

我的程序是SQL是

CREATE PROCEDURE [dbo].[UploadFile] 
(
    @FileName nvarchar(100) , 
    @FileSize nvarchar(50) , 
    @FileDescription nvarchar(200), 
    @FileExtontion nvarchar(10), 
    @DateUploaded nvarchar(50), 
    @FilePath nvarchar(3500), 
    @UserId int 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    declare @FileInBinary varbinary(MAX) 

    IF OBJECT_ID('#ORStable') IS NULL 
    BEGIN 
     -- Temporary stored into a hash table for avoid data error  
     CREATE TABLE #ORStable (Length BIGINT, vDocument VARBINARY(MAX)) 

     DECLARE @SQL_QUERY NVARCHAR(4000) 
     SET @SQL_QUERY= 'INSERT INTO #ORStable 
         SELECT len(bulkcolumn), * 
         FROM OPENROWSET(BULK '''[email protected]+''', SINGLE_BLOB) AS BinaryData' 

     exec SP_executesql @SQL_QUERY 
    END 

    SELECT TOP 1 @FileInBinary = vDocument FROM #ORStable 

    insert into [File] ([FileName], FileSize, FileDescription, FileExtontion, 
         DateUploaded, FileInBinary, UserId) 
    values (@FileName, @FileSize, @FileDescription, @FileExtontion, 
      @DateUploaded, @FileInBinary, @UserId) 

    DROP TABLE dbo.#ORStable 
END 
+0

这不是一个编程问题,您应该将此问题移至[数据库管理员](http://dba.stackexchange.com)。 – parth6 2014-10-18 07:14:13

+0

好 - 向我们展示**您的代码!**您的SQL语句是什么?你插入的表的结构是什么? – 2014-10-18 07:27:12

+0

即使考虑到正在制作这些数据的多个副本,这确实非常慢。由于这些副本,系统可能开始分页。运行时查找硬页面错误的增量。使用Process Explorer,使用系统内存信息“窗口”。 – usr 2014-10-18 08:27:52

我试图插入500 MB的文件到表(列数据类型:VARBINARY(MAX))使用散装 方法,

像您这样的低性能系统的大文件。

15分钟是正常的! ,还是太长了?

需要多长时间在文件夹之间复制该文件,两次同时进行? (由于日志记录,这比SQL Server需要做的多一点)?预计要么飞 - 我的sql数据库可以以近1gb /秒的速度复制类似的东西 - 或爬行(可能在低功耗的机器上,可能只有一个慢速光盘而不是大量的SSD)。

有没有更快的方法?

为手头的任务获取适当的硬件。 IO是王 - 而SQL Server依靠它。你的机器对于这项工作来说缺乏内存,并且可能有一个类似的非需求匹配光盘子系统。

+0

我的系统需要1分钟才能将文件夹中的500 MB复制到另一个文件夹 – Ibra 2014-10-18 07:53:48

+0

但是SQL需要在内存中保留更多的内容 - 严重的是2GB不足以在Windows平台上具有体面的体验(我的平板电脑说),所以您添加分页。我会说,不知道计算机基础会导致死亡。安达文件应付 - 一个文件副本 - 是2操作流。一个sql插入是至少3个流。 – TomTom 2014-10-18 12:02:43