我每天都在运行 Web 应用程序并将大量数据导入 sql server 数据库。不幸的是,我遇到了服务器故障(硬盘坏了),我不得不在新机器上重新安装 SQL Server 和其他应用程序。我的问题是,在从头开始设置系统后,将数据导入数据库开始变得非常漫长。新机器比旧机器(64GB RAM,8 个线程......)快得多,并且在应用程序上执行的所有其他操作都在瞬间执行。
数据导入如下所示:
- 读取 XML 文件
- 遍历每一行并将其插入数据库(没有批量插入,没有事务 - 只是干净的插入命令)
在服务器故障处理 200 000 行之前大约需要 2 分钟,现在大约需要 20 分钟 :( 我想我已经尝试了一切,这是 SQL Profiler 的屏幕截图:
表中的所有行都是插入语句。如您所见,持续时间从 7 到 120 不等,所以我认为这就是问题所在。有没有人知道可能是什么原因?
提前致谢!:)
ps 系统中有两个硬盘(RAID),SQL Server 2008 R2
编辑:数据库是从备份创建的
表架构如下所示:
create table [tempUpload].[Import_0016704] (
ROWNO int identity primary key,
[TheDate] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS ,
[Campaign] nvarchar(35) COLLATE SQL_Latin1_General_CP1_CI_AS ,
[AdGroup] nvarchar(7) COLLATE SQL_Latin1_General_CP1_CI_AS ,
[Domain] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS ,
[Impressions] nvarchar(5) COLLATE SQL_Latin1_General_CP1_CI_AS ,
[Cost] nvarchar(8) COLLATE SQL_Latin1_General_CP1_CI_AS ,
[ConversionsOnePerClick] nvarchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS ,
[Clicks] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS ,
[ClientId] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS
)
单个插入看起来像这样:
exec sp_executesql N'insert into [tempUpload].[Import_0016704] ([TheDate],[Campaign], [AdGroup],[Domain],[Impressions],[Cost],[ConversionsOnePerClick],[Clicks],[ClientId])
select
@v_165,@v_166,@v_167,@v_168,@v_172,@v_174,@v_176,@v_173,@v_177',
N'@v_165 nvarchar(20), @v_166 nvarchar(70),@v_167 nvarchar(14),@v_168 nvarchar(100),@v_172 nvarchar(10),@v_174 nvarchar(16),@v_176 nvarchar(2),@v_173 nvarchar(4),@v_177 nvarchar(20)',
@v_165=N'2013-04-07',@v_166=N'Tematy',
@v_167=N'120x600',
@v_168=N'gallery.com',
@v_172=N'21',
@v_174=N'0',
@v_176=N'0',
@v_173=N'0',
@v_177=N'243'
如果您需要更多详细信息,请给我一个标志。