[解決済み] TABLOCKとTABLOCKXの比較
質問事項
とはどのような違いがあるのでしょうか?
TABLOCK
と
TABLOCKX
?
http://msdn.microsoft.com/en-us/library/ms187373.aspx
は次のように述べています。
TABLOCK
は共有ロックであるのに対し
TABLOCKX
は排他ロックです。最初のロックは、もしかしたらインデックス・ロックの一種に過ぎないのでしょうか?また、ロックの共有とはどのような概念なのでしょうか?
解決方法は?
大きな違い
TABLOCK
は共有ロックを取得しようとします。
TABLOCKX
排他的ロック
トランザクションの中で、テーブルの排他的ロックをつかんだら、EG。
SELECT 1 FROM TABLE WITH (TABLOCKX)
他のプロセスでは掴めない 任意の はテーブルをロックしていることを意味します。 すべて クエリがテーブルにアクセスしようとすると、トランザクションがコミットされるまでブロックされます。
TABLOCK
は共有ロックを取得するだけで、共有ロックはトランザクションアイソレーションが
READ COMMITTED
(デフォルト)です。もしあなたの分離レベル
より高い
を、例えば
SERIALIZABLE
共有ロックは、トランザクションが終了するまで保持されます。
共有ロックは、うーん、共有ですね。つまり、2つのトランザクションがともにテーブルのSまたはISロックを保持している場合、同時にテーブルからデータを読み取ることができます。
TABLOCK
). しかし、もし
transaction A
はテーブルの共有ロックを保持しています。
transaction B
は、すべての共有ロックが解放されるまで排他ロックを取得することができません。どのロックがどのロックと互換性があるかについては、こちらをご覧ください。
msdnにて
.
どちらのヒントも、より細かいロック(行やページレベルのロックなど)を回避させる。原理的には、より詳細なロックはより良い同時実行を可能にします。例えば、あるトランザクションがテーブルの100行目を更新し、別のトランザクションが1000行目を更新したとします。 同時に を2つのトランザクションで実行します(ページロックがあると厄介ですが、それは省略します)。
しかし、時には、特定の操作のパフォーマンスを向上させ、デッドロックの可能性を排除するために、データベースとの同時実行を減らしたい場合があります。
一般的には
TABLOCK
または
TABLOCKX
ただし、エッジケースでどうしても必要な場合は別です。
関連
-
[解決済み】フラットファイルの日付カラムで「キャスト指定に無効な文字値があります」を修正する方法とは?
-
[解決済み] オブジェクト 'Users'、データベース 'XXX'、スキーマ 'dbo' で SELECT 権限が拒否されました。
-
[解決済み] ')' 付近の構文が正しくない場合の対処方法
-
[解決済み] データセットに対するSSRSクエリの実行に失敗しました
-
[解決済み] すべてのテーブル、すべてのカラムを特定の値で検索する SQL Server [重複]。
-
[解決済み] 文字列から特定の文字を削除する
-
[解決済み] SQL ServerでBegin / End BlocksとGoキーワードを使用する?
-
[解決済み] SQL Server Management StudioでIntelliSenseが機能しない
-
[解決済み] SQL ServerでGROUP BYと一緒にDISTINCTを使用する
-
[解決済み] クラスター化インデックスと非クラスター化インデックスの実際の意味は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PRIMARY KEY制約に違反しました。オブジェクトに重複したキーを挿入できない
-
[解決済み] SQL Server MS 2012の現在のセキュリティコンテキストでは、サーバープリンシパルはデータベースにアクセスできません。
-
[解決済み] SQL Server Error "String Data, Right Truncation "の意味と修正方法について教えてください。
-
[解決済み] MS SQL Server 2005で行のSNoを自動的に設定する方法は?
-
[解決済み] SSISで新しいレコードを挿入する前に、宛先テーブルを空にするにはどうすればよいですか?
-
[解決済み] SQL Server: caseステートメントでUniqueIdentifierを文字列に変換する
-
[解決済み] 累積和の求め方
-
[解決済み] UPDATEエラーです。"REPLACEの引数1の引数データ型textは無効です"
-
[解決済み] すべてのテーブル、すべてのカラムを特定の値で検索する SQL Server [重複]。
-
[解決済み] SQLのReplace関数内の正規表現?