使用批量插入将文件插入到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
答
我试图插入500 MB的文件到表(列数据类型:VARBINARY(MAX))使用散装 方法,
像您这样的低性能系统的大文件。
15分钟是正常的! ,还是太长了?
需要多长时间在文件夹之间复制该文件,两次同时进行? (由于日志记录,这比SQL Server需要做的多一点)?预计要么飞 - 我的sql数据库可以以近1gb /秒的速度复制类似的东西 - 或爬行(可能在低功耗的机器上,可能只有一个慢速光盘而不是大量的SSD)。
有没有更快的方法?
为手头的任务获取适当的硬件。 IO是王 - 而SQL Server依靠它。你的机器对于这项工作来说缺乏内存,并且可能有一个类似的非需求匹配光盘子系统。
这不是一个编程问题,您应该将此问题移至[数据库管理员](http://dba.stackexchange.com)。 – parth6 2014-10-18 07:14:13
好 - 向我们展示**您的代码!**您的SQL语句是什么?你插入的表的结构是什么? – 2014-10-18 07:27:12
即使考虑到正在制作这些数据的多个副本,这确实非常慢。由于这些副本,系统可能开始分页。运行时查找硬页面错误的增量。使用Process Explorer,使用系统内存信息“窗口”。 – usr 2014-10-18 08:27:52