使用大容量插入将文件插入SQL Server 2008 R2
我试图使用批量方法将一个500 MB的文件插入表中(列数据类型:使用大容量插入将文件插入SQL Server 2008 R2,sql,sql-server-2008-r2,bulkinsert,Sql,Sql Server 2008 R2,Bulkinsert,我试图使用批量方法将一个500 MB的文件插入表中(列数据类型:VARBINARY(MAX)),SQL大约需要15分钟来插入该文件。我有2GB内存,我的电脑是Core2Duo,我使用的是SQLServer2008R2 我的问题是: 15分钟是正常的吗,还是太长了 有没有更快的方法 谢谢 我的程序是SQL CREATE PROCEDURE [dbo].[UploadFile] ( @FileName nvarchar(100) , @FileSize nvarchar(
VARBINARY(MAX)
),SQL大约需要15分钟来插入该文件。我有2GB内存,我的电脑是Core2Duo,我使用的是SQLServer2008R2
我的问题是:
- 15分钟是正常的吗,还是太长了李>
- 有没有更快的方法
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
我正在尝试使用大容量将一个500 MB的文件插入表中(列数据类型:VARBINARY(MAX))
方法,
对于像您这样的低性能系统,需要大文件
15分钟是正常的吗,还是太长了
在文件夹之间同时复制两次该文件需要多长时间?(由于日志记录,这比SQL Server需要做的要多一点)?我的sql数据库可以以接近1gb/秒的速度复制类似的内容,或者可以进行爬网(可能是在一台低功耗机器上,可能只有一张慢速光盘,而不是一吨SSD)
有没有更快的方法
为手头的任务准备合适的硬件。IO是王者,SQL Server靠它生存。您的machien内存不足,无法完成此任务,并且可能有一个类似的非需求匹配光盘子系统。这不是编程问题,您应该将此问题转移到。好吧-向我们展示您的代码!您的SQL语句是什么?您要插入的表的结构是什么?这确实非常缓慢,即使考虑到正在制作此数据的多个副本。可能是因为这些副本,系统开始分页。在运行时查找硬页错误的增量。使用Process Explorer,使用系统内存信息“窗口”。我的系统需要1分钟才能将一个500 MB的文件从一个文件夹复制到另一个文件夹,但SQL需要在内存中保留更多的内容,而且严重的是,2gb还不足以在windows级别上获得良好的体验(我的平板电脑上说),因此您需要在其中添加分页。我会说,死亡是因为不懂计算机基础知识。Anda文件副本-一个文件副本-是两个操作流。sql插入至少包含3个流。