0

同じテーブルに対して ADO.Net を使用して同時一括挿入を行う場合、それぞれが次のテーブルに対して分離レベル「ReadCommitted」のトランザクションを持つ別々の接続を持つ 2 つの異なるプロセスを使用します。

  • RowId:bigint ID
  • FooId:uniqueidentifier PK Non Clustered (bulkinsert の前にコードで事前に割り当てられます)

同時挿入に関しては、次のほうがよいでしょうか。

  • a)クラスター化されたインデックスと一意のキー制約インデックスを使用してRowIdにPKを配置し、FooIdでクラスター化されていません
  • b) RowId にクラスター化されていない、一意のキー制約インデックスを配置します

他のヒントはありますか?

4

1 に答える 1

3

どちらを選択しても、インデックスの 1 つが RowId の ID 順になります。どちらの操作も同じ領域 (インデックスの最後) に行を挿入しようとするため、最小限のログ (つまり、可能な限り高速な読み込み) を達成することはできません。Data Load Performance Guideを読むことを強くお勧めします。

明らかな疑問は、なぜ2 つの同時一括挿入操作が必要なのかということです。速くなるよりも、お互いに遅くなる可能性が高いです。クラスター化されたインデックスのシナリオで並列高速ロード ストリームを実現することは非常に困難です。シングル ストリームと TF610 を試してみましたか? 単一のストリームで最小ログの一括挿入を達成でき、十分な大きさのバッチ サイズを使用できれば、完全にログを記録した 2 つの並列ストリームよりも高速になると予想されます。

于 2012-05-21T23:30:38.747 に答える