0

我每天都在运行 Web 应用程序并将大量数据导入 sql server 数据库。不幸的是,我遇到了服务器故障(硬盘坏了),我不得不在新机器上重新安装 SQL Server 和其他应用程序。我的问题是,在从头开始设置系统后,将数据导入数据库开始变得非常漫长。新机器比旧机器(64GB RAM,8 个线程......)快得多,并且在应用程序上执行的所有其他操作都在瞬间执行。

数据导入如下所示:

  1. 读取 XML 文件
  2. 遍历每一行并将其插入数据库(没有批量插入,没有事务 - 只是干​​净的插入命令)

在服务器故障处理 200 000 行之前大约需要 2 分钟,现在大约需要 20 分钟 :( 我想我已经尝试了一切,这是 SQL Profiler 的屏幕截图:

http://content.screencast.com/users/czyzas/folders/Jing/media/50bc21c1-1e98-478e-88d1-0751f447b619/2013-04-24_1932.png

表中的所有行都是插入语句。如您所见,持续时间从 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'

如果您需要更多详细信息,请给我一个标志。

4

0 回答 0