私は Web アプリケーションを実行しており、毎日大量のデータを SQL Server データベースにインポートしています。残念ながら、サーバー障害 (ハード ドライブの故障) が発生したため、SQL Server と他のアプリを新しいマシンに再インストールする必要がありました。私の問題は、システムを最初からセットアップした後、データをデータベースにインポートするのに非常に時間がかかり始めたことです。新しいマシンは古いマシン (64 GB RAM、8 スレッドなど) よりもはるかに高速であり、アプリケーションで実行される他のすべてのアクションは瞬時に実行されます。
データのインポートは次のようになります。
- XMLファイルの読み込み
- 各行を反復処理してデータベースに挿入する (一括挿入なし、トランザクションなし - クリーンな挿入コマンドのみ)
サーバー障害が発生する前は、200,000 行の処理に約 2 分かかりましたが、現在は約 20 分です:( すべてを試したと思います。SQL プロファイラーのスクリーンショットを次に示します。
テーブル内のすべての行は挿入ステートメントです。ご覧のとおり、持続時間は7から120までさまざまなので、ここが問題だと思います。何が原因か分かる人いますか??
前もって感謝します!:)
ps システム (RAID) には 2 台のハード ドライブがあり、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'
これについてさらに詳細が必要な場合は、サインをください。