2016-08-03 5 views
1

時間を割いて私の質問を読んでくれてありがとう。私たちは大量のデータを処理するT-SQLを使ってシステムを構築しました。このデータの処理を開始すると、通常、この操作には約15分かかります。この間、何らかの理由で、データベース内のすべてのオブジェクトがロックされているように見えます。いくつか拡張すると、私は書かれているテーブルを照会することができないことを理解しています。しかし、SQL Serverでは、たとえばオブジェクトエクスプローラのテーブルノードでF5キーを使用してテーブルの一覧を更新すると、タイムアウトロックメッセージが表示されます。以下のテンプレートに基づいてSQL Server大きなトランザクションすべてのテーブルをロック

私のコードの作品:

CREATE PROCEDURE Sample 

as 

SET NOCOUNT, XACT_ABORT ON 

BEGIN TRY 

BEGIN TRANSACTION 

... 

COMMIT TRANSACTION 

END TRY 

BEGIN CATCH 
    BEGIN 
     PRINT 'STORED PROCEDURE - Returned errors while processing' 
     ROLLBACK TRANSACTION 
    END 
END CATCH 

、私はこれは私がSELECT WITH(NOLOCK)任意のテーブルにクエリを実行することができます起動したとき。しかし、私はビュー、ストアドプロシージャの定義を見ることはできませんまたは基本的にデータベース内の他の種類の操作を行います。

私はすでにREAD UNCOMMITTED分離レベル設定を行っていますが、それは違いはありません。

この問題についてお手伝いします。

敬具、あなたのTRYのCATCHブロックである

+0

分離レベルは、ステートメントがどのように動作するかの選択に影響、それらは、DDLには影響しません、DML..Locking、ブロッキングを、大きなトピックですので、ブロッキングをロッキング解決する方法について検索してくださいそこから始める – TheGameiswar

答えて

0

コードは、データ更新の大きな金額を行います。隔離レベルを変更しても、ロックに関する問題は解決されません。

何のために最善であることは、これらの基本的な確認/変更を行うことです。

  • 小さなバッチに挿入/更新を分割してみてください。ロックが大幅に軽減され、スムーズに動きます。
  • 返されるデータが高速になるように、更新クエリに含まれるテーブルのインデックスを確認します。
0

問題は分離レベルとは関係がありません。排他的な問題です。

データベースレベルまでロックEscalationの場合があります。

避けエスカレーション小さいバッチ取引を行う...

関連する問題