データを変換し、変換された (数百万行) データを SQL Server に書き込むサービスを実行しています。フロントエンドはこれらのテーブルから読み取ります。
当然のことながら、読み取りパフォーマンスを犠牲にすることなく、このデータをできるだけ高速に書き込みたいという野心があります。
私の現在のアプローチは、一度に 1 つのサーバー呼び出しで、個々の行を書き込むことです。これはロックを最小限に抑えるように見えますが、書き込み速度は最適ではありません。スロットルなしで、1 秒あたりおそらく数千行を達成しています。
データの一括読み込みも試みましたが、デッドロックとタイムアウトが発生しました。これは、挿入/更新時のロックのエスカレーションが原因であると想定しています (256 行のチャンクでコミットをバッチ処理します)。
読み取りパフォーマンスを犠牲にすることなく、レコードをデータベースにコミットするより高速な方法についてのアイデアはありますか?
いくつかの詳細:
- 変換されたデータは多数の異なるテーブルに存在し、読み取りパフォーマンスを最大化するためにすべてインデックスが付けられます。
- データの書き込みには、継続的に開いている単一の接続を使用します。