データがある種のバッチで処理されるデータベースがあり、各バッチには 100 万件のレコードが含まれる場合もあります。コンソール アプリケーションでデータを処理しています。バッチの処理が完了したら、それを完了としてマークし (削除されない場合にもう一度読み取らないようにするため)、削除して次のバッチに進みます。
処理されたデータの「バッチ」を削除する次の単純なストアド プロシージャがあります。
CREATE PROCEDURE [dbo].[DeleteBatch]
(
@BatchId bigint
)
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
DELETE FROM table1 WHERE BatchId = @BatchId
DELETE FROM table2 WHERE BatchId = @BatchId
DELETE FROM table3 WHERE BatchId = @BatchId
COMMIT
RETURN @@Error
コマンドのタイムアウト値を 10 分に設定して NHibernate を使用していますが、DeleteBatch プロシージャの呼び出しが時折タイムアウトします。
実際には、DeleteBatch が完了するのを待ちたくありません。既にバッチを完了としてマークしているので、保留中のバッチがなくなったら、次のバッチの処理に進むか、コンソール アプリケーションを終了することもできます。
Microsoft SQL Express 2012 を使用しています。
SQL サーバーに伝える簡単な解決策はありますか?
また、DeleteBatch よりも他のクエリの方が重要であるため、DeleteBatch の処理優先度を低く設定できれば素晴らしいと思います。