【问题标题】:Insert file into SQL Server 2008 R2 using Bulk Insert使用批量插入将文件插入 SQL Server 2008 R2
【发布时间】:2014-10-18 07:09:41
【问题描述】:

我正在尝试使用 Bulk 方法将 500 MB 的文件插入到表中(列数据类型:VARBINARY(MAX)),SQL 大约需要 15 分钟来插入文件。我有 2GB 内存,我的电脑是 core 2 duo,我使用的是 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 '''+@FilePath+''', 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

【问题讨论】:

  • 这不是编程题,请移步至Database Administrators
  • 好吧 - 向我们展示您的代码!您的 SQL 语句是什么?您要插入的表的结构是什么?
  • 即使考虑到正在制作此数据的多个副本,这确实非常慢。也许系统会因为这些副本而开始分页。在运行时查找硬页面错误的增量。使用Process Explorer,使用系统内存信息“Window”。

标签: sql sql-server-2008-r2 bulkinsert


【解决方案1】:

我正在尝试使用 Bulk 将 500 MB 的文件插入表(列数据类型:VARBINARY(MAX)) 方法,

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

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

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

有没有更快的方法?

为手头的任务获取合适的硬件。 IO 为王——SQL Server 靠它生存。您的机器内存不足,无法完成这项工作,并且可能有类似的不符合要求的磁盘子系统。

【讨论】:

  • 我的系统需要 1 分钟将一个 500 MB 的文件从文件夹复制到另一个
  • 但是 SQL 需要在内存中保留更多 - 严重的是 2gb 甚至不足以在窗口级别上获得体面的体验(我的平板电脑说)所以你添加了分页。我会说,不知道计算机基础知识会死。 Anda 文件处理 - 一个文件副本 - 是 2 个操作流。一个 sql 插入至少是 3 个流。
猜你喜欢
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多