4

過去数か月間、データをレガシー データベースから SQL Server データベースに移動するために、いくつかの SSIS パッケージを実行しました。変換にもよりますが、約 500 万件のレコードを処理するには、通常 10 ~ 20 分かかります。

パッケージの 1 つで発生している問題は、宛先の列の 1 つが SQL Server XML データ型であるため、パフォーマンスが非常に低いことです。

 Data comes in like this: 5
 A script creates a Unicode string like this: <XmlData><Value>5</Value></XmlData>
 Destination is simply a column with XML data type

これは本当に遅いです。何かアドバイス?SQL トレースを実行したところ、舞台裏で SSIS が挿入前に各行で変換を実行していることに気付きました。

 declare @p as xml
 set @p=convert(xml,N'<XmlData><Value>5</Value></XmlData>')
4

1 に答える 1

2

一時テーブルを使用して、結果の 500 万件のレコードを XML 変換なしで格納してから、SQL Server 自体を使用してそれらを tempDB から最終的な宛先に移動してみてください。

INSERT INTO final_destination (...)
SELECT cast(N'<XmlData><Value>5</Value></XmlData>' AS XML) AS batch_converted_xml, col1, col2, colX 
FROM   #tempTable

5.000.000 が 1 つのバッチに対して多すぎるデータになる場合は、小さなバッチで行うことができます (100k 行が魅力のように機能するはずです)。

プロファイラーによってキャプチャされたレコードは、1 行に 1 つのコマンドを持つ OleDB 変換のように見えます。

于 2012-10-22T09:48:36.190 に答える