[解決済み] SQL Server の SELECT クエリにおける LOCKS を理解する
質問
を使用する利点は何でしょうか?
SELECT WITH (NOLOCK)
を使用する利点は何なのでしょうか?
SELECT
クエリである場合。
SQL Server ではどのように処理されるのでしょうか?SQL Server では
SELECT
クエリは別の
SELECT
クエリ?
私はSQL Server 2012を使用しており、Linq-to-SQLの
DataContext
.
(編集)
性能について :
-
2番目の
SELECT
を待たねばならないのでしょうか?SELECT
が終了するまで待つ必要があります。SELECT
? -
対して
SELECT WITH (NOLOCK)
?
どのように解決するのですか?
A
SELECT
は、SQL Server では
共有ロック
をテーブルの行に置き、2番目の
SELECT
も共有ロックを必要とし、これらは互いに互換性があります。
だからダメなんです。
SELECT
をブロックすることはできません。
SELECT
.
何が
WITH (NOLOCK)
クエリヒントが使用されるのは、(別の接続によって)挿入される途中の、まだコミットされていないデータを読み取ることができるようにするためです。
このクエリヒントがない場合
SELECT
がテーブルの読み込みをブロックしている可能性があります。
INSERT
(または
UPDATE
を配置するステートメントです。
排他的
を配置し、その操作のトランザクションがコミット(またはロールバック)されるまで、行(またはテーブル全体)を排他的にロックします。
の問題点は
WITH (NOLOCK)
のヒントの問題点は、最終的に挿入されないデータ行を読み込んでしまうことです(もし
INSERT
トランザクションがロールバックされた場合) - そのため、例えば、レポートには実際にデータベースにコミットされたことのないデータが表示されるかもしれないのです。
もう一つ、便利なクエリヒントがあります。
WITH (READPAST)
. これは
SELECT
コマンドは、読み込もうとした行のうち、排他的にロックされている行をスキップするように指示します。このコマンドは
SELECT
はブロックしませんし、コミットされていない "dirty" データを読み取ることもありません。
関連
-
[解決済み] NVARCHAR(MAX)の最大文字数を教えてください。[重複しています]。
-
[解決済み] SQL ServerにおけるXOR
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL ServerにおけるLEFT JOINとLEFT OUTER JOINの比較
-
[解決済み] SQLのSELECTでIF...THENを実行するにはどうすればよいですか?
-
[解決済み] SQL Server にテーブルが存在するかどうかを確認する
-
[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQL Server の更新コマンドでエラー - "現在のコマンドで深刻なエラーが発生しました".
-
[解決済み] SSRS レポートの定義が無効です。
-
[解決済み] データベースのトランザクションログが満杯です。ログの領域が再利用できない理由を調べるには、sys.databases の log_reuse_wait_desc カラムを参照してください。
-
[解決済み] 結果を分割するためのSQLの小数点以下の値
-
[解決済み] 階層テーブルの設計
-
[解決済み] 日付から年内の週番号を取得する
-
[解決済み] SQL Server のストアドプロシージャを SQL Developer で実行するには?
-
[解決済み] SQL Server Management StudioでIntelliSenseが機能しない
-
[解決済み] SQL Server の "with (nolock)" とは何ですか?
-
[解決済み】SELECT文におけるNOLOCKヒントの効果について