問題タブ [nolock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - SQLServerのNoLockヒントに相当するPostgreSQL
SQLServerでは、構文 "(nolock)"を使用して、クエリがテーブルをロックしたり、同じテーブルをロックしている他のクエリによってブロックされたりしないようにすることができます。例えば
Postgresの同等の構文は何ですか?PGでのテーブルロックに関するドキュメント(http://www.postgresql.org/docs/8.1/interactive/sql-lock.html )を見つけましたが、すべてがテーブルをロックする方法を対象としているようで、ロックされていないことを確認していません。 。
sql - データベース全体の設定で NOLOCK を適用できますか?
特定のデータベースで実行される SELECT ステートメントに WITH(NOLOCK) を適用する方法はありますか?
sql - これら 2 つの SQL ステートメント間のデッドロックを回避するにはどうすればよいですか?
SQL Server 2005 で実行する 2 つのストアド プロシージャを別々のスレッドで実行しています。1 つのプロシージャは一連のテーブルに新しい行を挿入し、もう 1 つのプロシージャは同じテーブル セットから古いデータを削除します。これらのプロシージャは、テーブルDLevelおよびModelでデッドロックに陥っています。スキーマは次のとおりです。
(出典: barramsoft.com )
Table DFile : Primary Key = DFileID
Table DLevel : Primary Key = DLevelID, Foreign Key: DFileID
Table Model : Primary Key = ModelID, Foreign Key: DFileID
Table ELement : Primary key = ElementID, Foreign Key1: DFileID, Foreign Key2: DLevelID
デッドロックの原因となっている正確に 2 つの SQL ステートメント (各ストアド プロシージャから 1 つ) を分離しました。いずれかの手順でデッドロックが報告されるのを見てきました。どちらの場合も top (1000) を使用し、削除/挿入する行がなくなるまで、両方のステートメントがループで実行されます。
SQL ステートメント 1:
SQL ステートメント 2:
注: @fileID1と@fileID2の値は、常に異なることが保証されています。DLevel テーブルの平均値は約 1 です。1 つのDFileIDに対して 60 行であるため、1回のパスですべての行の削除が完了します。
これら 2 つの SQL ステートメント間のデッドロックを回避するにはどうすればよいですか?
編集 1: 問題をより明確にするために書き直しました。追加画像; SQL を簡素化し、DLevel テーブルへの結合を削除しましたが、デッドロックの原因にはなりませんでした。
編集 2:
デッドロック グラフの XML を追加しました。Modelテーブル
でデッドロックが発生するようになりました。DLevelテーブルと同様のモデルの削除ステートメントとスキーマ。
sql - TSQL NOLOCK VIEW とストアド プロシージャ
私たちの会社では、ビューとストアド プロシージャを使用する傾向があります。
私たちは最近、このNOLOCK
ステートメントを多くのビューに実装し始めました。
私が疑問に思っていNOLOCK
たのは、ビューに適用している場合、ストアドプロシージャに「滴り落ちる」ことです
と呼ばれるビューがviewPartyPackage
あり、ビューステートメントが...
また、ストアドプロシージャもありました:
ストアド プロシージャから呼び出しているため、NOLOCK 機能が失われ、ストアド プロシージャにも (NOLOCK) を設定する必要がありますか? それとも、ビューにある NOLOCK が機能しますか?
sql-server - SQLServerのサーバー側NOLOCK
Oracle DBでフラグを構成できること、特定のDBで実行されているすべてのselectクエリを、NOLOCK
ヒントが追加されたかのように実行できることを知っています。SQL Serverに似たようなものはありますか?
java - nolock を使用した Java Hibernate HQL クエリ
(NOLOCK) ヒントを追加したかのようにこれらのクエリを実行する方法はありますか?
sql - SQLServerNOLOCKおよび結合
背景:実行したいパフォーマンスクリティカルなクエリがあり、ダーティリードは気にしません。
私の質問は; 結合を使用している場合、それらにもNOLOCKヒントを指定する必要がありますか?
例えば; は:
に相当:
または(NOLOCK)
、結合されたテーブルをロックしないように、結合のヒントを指定する必要がありますか?
delphi - TADOQuery と TADOTable で NOLOCK をどのように使用しますか?
SQL テキスト "SELECT * FROM TABLE1 WITH (NOLOCK)" があります。
2 つの質問:
SQL テキストに NOLOCK ヒントを含めずに、TADOQuery で NOLOCK ヒントを使用するにはどうすればよいですか? SQL を動的に構築した文字通り何千もの TADOQuery がありますが、MSSQL 以外のデータベース プラットフォームで使用することは言うまでもなく、それらすべてに WITH (NOLOCK) を追加することは困難です。TADOQuery プロパティはありますか?
TADOTable で同じことを達成するにはどうすればよいですか? TADOTable には SQL がないので、NOLOCK ヒントを使用するように指示するにはどうすればよいでしょうか?
ありがとう
sql-server - UPDATE ステートメントでは、FROM 句で NOLOCK ヒントが尊重されますか?
次の更新ステートメントがあるとします。
TABLE_1 と TABLE_2 の (NOLOCK) ヒントは受け入れられますか?
linq-to-sql - linq-to-sql コマンドテキストを変更する場合、接続を閉じる必要がありますか?
このように、linq-to-sql のコマンドテキストを変更して、強制的に nolock を使用するようにしています...
これは MVC アプリケーションであるため、datacontext はベース コントローラーにあり、このコードの前、さらに重要なことには後も使用されている可能性があります。このルーチンで接続を閉じる必要がありますか? それともまったくありませんか?それともここで開いた場合のみですか?
アップデート:
現在、より一般的な関数 (DataContext クラス内) を使用して commandtext を変更し、接続がここで開かれている場合は閉じています。そして、open は ExecuteReader に移動されました。これまでのところ、散発的なデッドロックの問題が機能し、軽減されています。結果は最新である必要はありません。
過去に、推奨される方法でトランザクションを使用すると、サイトが一晩で接続を使い果たしてしまうことがわかりました。私の知る限り、これは linq-to-sql のバグです。それを回避する方法があるかもしれませんが、私はメイン コードを単純に保つようにしています。私は今「ただ」これをしなければなりません...