何も考えずに大量のDLETE文発行すると、
大量のロック(データ削除&インデックス削除)が発生して、ロックされちゃうので
こんなことをやると、多少は解除できる……
-- 5000件ずつデータを削除 SET ROWCOUNT 5000 DELETE FROM [テーブル名] WHERE 削除条件 WHILE(@@ROWCOUNT > 0) DELETE FROM [テーブル名] WHERE 削除条件 SET ROWCOUNT 0どこで、見たんだっけ?って思ったら、SQL Server 2008 自習書シリーズ No.18(※pdf)か。
しかしこの方法では、データを少しずつ削除するので、削除に時間がかかってしまうという問題と、運用管理が複雑になってしまうというデメリットがありますはい、すみません。
(獲得するロック数を減らすことで同時実行トランザクションのパフォーマンスは向上するので、全体としてのスループットは向上します)。
この問題は、データ パーテゖションを利用すれば解決できるので、SQL Server 2005 以降のバージョンを利用している場合は、データ パーテゖション機能を利用することをお勧めします。
データ パーテゖションであれば、削除したいパーテゖションを切り離す(SWITCH する)だけで、削除は一瞬で完了します。