この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 8936|答える: 0

SQLロック NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[リンクをコピー]
掲載地 2016/07/20 14:02:51 | | |

ノーロック
このオプションを選択すると、SQL Serverはロックなしでデータを読み取ったり変更したりします。 この場合、ユーザーは「ダーティデータ」として知られる未コミットトランザクションやロールバックからデータを読み取ることができます。

ホールドロック
このオプションを選択すると、SQL Serverはトランザクション全体が終了するまでこの共有ロックを維持し、その過程でロックを解除しません。

アップドロック
このオプションを選択すると、SQL Serverはデータを読み込む際に共有ロックの代わりにモディエットロックを使用し、トランザクションやコマンドの終了までこのロックを維持します。 このオプションにより、複数のプロセスが同時にデータを読み取れるが、そのプロセスだけがデータを変更できます。

TABLOCK
このオプションを選択すると、SQL Serverはコマンドが終了するまでテーブル全体に共有ロックを適用します。 このオプションにより、他のプロセスはデータの読み取りのみを可能にし、そのデータを変更できません。

パグロック
このオプションがデフォルトであり、選択するとSQL Serverは共有ページロックを使用します。

TABLOCKX(排他的テーブルロック)
このオプションを選択すると、SQL Serverはコマンドやトランザクションが終了するまでテーブル全体にロックをかけます。 これにより、他のプロセスがテーブル内のデータを読み取ったり変更したりするのを防ぎます。

HOLDLOCKはトランザクション全体が完了するまで共有ロックを保持し、ロックされたオブジェクトが不要になった時点で、SERIALIZABLEトランザクション分離レベルに等しい状態でリリースされます

NOLOCK文は共有ロックを発行せずに実行されるため、READ UNCOMMITDトランザクション隔離レベルに等しいダーティリードが許されます

PAGLOCKは複数のページロックを使用し、1つのテーブルロックを使用します

READPASTは、ロックされた行をスキップしてトランザクションを実行させ、READの未コミットトランザクション隔離レベルでは、ページ、ゾーン、テーブルのロックはスキップせず、RIDロックのみをスキップします

ROWLOCKはrowlockの使用を強制します

TABLOCKXは排他的テーブルレベルのロックの使用を強制し、トランザクション中に他のトランザクションがテーブルを使用できないようにします

UPLOCKは共有ロックなしでテーブルを読み取る際に更新の使用を強制します

注:データベース内のテーブルをロックすることの違い
SELECT * FROM table WITH(HOLDLOCK)他のトランザクションはテーブルを読み取ることができますが、更新や削除はできません
SELECT * FROM table WITH (TABLOCKX) その他のトランザクションはテーブルの読み取り、更新、削除ができません




先の:SQLにおけるロック、ダーティーリード、繰り返しできないリード、そして誤リード
次に:SQL Serverはデッドロックを確認し、デッドロックを解除します
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com