2014-10-18 147 views
1

我試圖使用批量方法向表(列數據類型: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

回答

0

我試圖插入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