web-dev-qa-db-ja.com

テーブルへの大きな挿入/更新により、SQLServerがインデックスを再配置している間にタイムアウトが発生します

SSISを使用して200万行のテーブルの約100万行を挿入/削除します。

このテーブルには20個のインデックスがあります。

SSISが終了した直後に、フロントエンドでタイムアウトが発生しています。タイムアウトは最終的になくなります。

インデックスの再編成中に、インデックスがこれを引き起こしているのではないかと思います。

私たちは何ができる?

データが更新されるとインデックスが更新され、インデックスの更新は同期されます。

現在、統計の更新は非同期操作です。データの更新が手動で行われた後、問題のテーブルの統計を更新します。

2
mrdenny

テーブル内の20%を超える行を更新すると、 statistics 更新がトリガーされます。

SQL Serverのデフォルトの動作は、これを同期的に実行することです。これは、影響を受けるインデックスが実行プランで使用されている場合、オプティマイザは統計が古くなっていることに気づき、すぐに更新を強制し、実行プランを再コンパイルすることを意味します。

SQL Server 2005には、データベースの統計更新を非同期にする新機能があります。つまり、オプティマイザーは古い統計を使用しますが、バックグラウンドで統計更新を実行するため、次のクエリで新しい統計が利用されます。 。コマンドはAUTO_UPDATE_STATISTICS_ASYNC ONです。詳細については、 [〜#〜] bol [〜#〜] を参照してください。

すでに提案されている代替方法は、ロード後にテーブルを手動で更新することです。これは、UPDATE STATISTICSコマンドを使用して実行できます。これが [〜#〜] bol [〜#〜] リファレンスです。

1
Nick Kavadias

SSISで一括挿入タスクを使用している場合は、バッチサイズを設定してみてください。これにより、コミットを間に挟んで小さなチャンクに分割されます。

0
SqlACID