スキーマが異なる非常に多数(例:30000)の複数のxmlファイルをSQL Server 2008にインポートするための最良のアプローチは何ですか?
現在、各ファイルをループしてデータをロードし、データの挿入にdatatable
使用SqlBulkCopy
していますが、時間がかかります(約1.5時間)。
スキーマが異なる非常に多数(例:30000)の複数のxmlファイルをSQL Server 2008にインポートするための最良のアプローチは何ですか?
現在、各ファイルをループしてデータをロードし、データの挿入にdatatable
使用SqlBulkCopy
していますが、時間がかかります(約1.5時間)。
これはそれほど長くはかからないはずです。私の見積もりでは、約600MBのデータがあります。10MB/秒または少なくとも1MB/秒に問題なく近づくことができるはずです。つまり、1〜10分は簡単に達成できるはずです。
何をすべきか:
詳細がなければ、正確にするのは難しいですが、私は推測することができます:
SqlBulkCopy
通常は高速なので、インサートはボトルネックではない可能性があります。データテーブルよりも少し速く実行できますが、おそらく問題ではありません。DataTable
sは「インデックス」を持つことができます。つまり、主キーと制約。これらは非常に非効率的に実装されています-これらは間違いなく問題を引き起こす可能性があります。SqlBulkCopy
高速ですが、行数が多い場合に最適です。ごとに1つのファイルだけをコピーする場合SqlBulkCopy
、これは30000の呼び出しを意味し、おそらくデータベース側で少なくとも30000のfsyncを実行します。を1つだけ使用する必要がありますSqlBulkCopy
。XmlDocument
にロードして、多くの非効率的なループやXPathでクエリを実行する場合)、CPU負荷の問題が発生している可能性があります。それを念頭に置いて、私はこの順序で以下を見ていきます
DataTable
)SqlBulkCopy
インスタンス-(スレッドごとに)1つだけ使用します注文は、この問題をチェックするのがどれほど難しいかに触発されています。ディスクのロードに問題が発生する可能性は低いですが、確認するのは簡単なので、その可能性を排除することから始めたほうがよいでしょう。データベーススキーマの問題はそれほど起こりそうにありませんが、特定するのにはるかに手間がかかるので(どのインデックスであり、それを削除することで別のワークフローに影響を与えますか?)、最後に確認します。