問題タブ [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.
entity-framework - Entity FrameworkがTransactionScopeを無視する(NOLOCKで追加しない)のはなぜですか?
私は何が欠けていますか?
次のような TransactionScope を使用して NOLOCK で読み取ろうとしています。
SQLクエリにNOLOCKが追加されていることを期待していました(SQLプロファイラーとカスタムDbCommandInterceptorを調べましたが、そこにはありません...
更新:さらに調査した結果、NOLOCK の「ヒント」(SQL Server 固有 - また、1 つのテーブルのみに固有) なしで、選択したカーソルが結局使用されているのではないかと思います。現在のトランザクションを取得するコードをいくつか見つけて、正しく選択されたトランザクションの分離 (ReadUncommitted / Serializable など) が表示されているようです。まだテストしたいのですが、ご意見があればお知らせください。
java - Hibernate: 分離レベルを変更せずに、すべての選択クエリで 'with (NOLOCK)' ヒントを強制する
簡単な背景ストーリー:
最近、データベースのロックに問題がある非常に古いアプリケーションに取り組んでいます。アプリは Java で作成され、Hibernate を使用します。私たちが特定した問題の 1 つは、READ_COMMITED と READ_UNCOMMITED の間で分離レベルが頻繁に変更される一方で、トランザクションが不自然に長く存続することです。トランザクションが小さくなるようにコードをリファクタリングすることが明確な解決策であることは認識していますが、これは膨大な作業であり、現時点では余裕がありません (アプリのほとんどの使用部分は新しいシステムに移行されていますが、この手順は比較的時間がかかります)。 )。
そのため、すべての Select 操作に READ_UNCOMMITED を使用し、その他すべてに READ_COMMITED を使用しているため、私たちを支援してきた DBA は、分離レベルをグローバル READ_COMMITED に変更し、すべての選択クエリを変更してヒント 'with( NOLOCK)」。彼は、トランザクション内で分離レベルを頻繁に変更する必要がないという利点を提供しながら、機能的にはデータの取得方法に違いはないはずだと言います (現在は問題なくダーティ リードを使用しているため)。彼の考えは、分離レベルの変更が原因でデータベースがロックされるという最近の報告にも関連していると思います。
それで - マップされた Java オブジェクトと HQL の使用によって自動的に生成されるすべてのクエリに 'with (nolock)' ヒントを追加するように hibernate に指示できますか?これはそれを押しているように見えますが:))分離レベルを変更せずに?
最後の補足: 私たちは古いバージョンの hibernate v3.5 を使用しており、今のところアップグレードの可能性は低いです。何人かの信じられないほど「賢い」人々が、アプリケーションが使用する独自のコードを挿入して、ある時点でそれを汚染することにしました。アップグレードを何度も試みましたが、失敗しました。
また、かなりの数の関連スレッドをチェックしましたが、一般的な考え方は、nolock を使用しないで、分離レベルを変更することです。
Edit1: アプリは過去 12 年間継続的に開発されてきたため、現在の開発チームが一度も見たことのないモジュールがたくさんあります。理想的なソリューションは、すべての識別を必要としないものです。永続化されたオブジェクトを使用する Java コードの 1 ビット。
Edit2:これについて考えられる方法-Hibernateが許可する場合-dbドライバーに渡される前に、フォーマットされたSQLクエリを受け取る形式のInterceptorを追加することです。次に、何らかの形式の正規表現を使用して、ヒントを自分で追加します。
事前にどうもありがとうございました。
sql-server - T-SQL データベース内のすべてのテーブルに対してロックのないビューを作成する
サーバー上で実行して、データベース内のすべてのテーブルをロックせずにビューを作成できるスクリプトを探しています。ありがとう!
c# - Entity Framework が NOLOCK と結合
Entity Framework を使用して SQL 関数を C# に変換しています。変換している関数は、NOLOCK
結合されるすべてのテーブル (10 個) のヒントを使用します。
このため、トランザクション全体にを設定することにIsolationLevel
しました。ReadUncommitted
現在、私はそのように内部結合を行っています。
などなど
たとえば、リストを宣言しますか
クエリを開始する前にコンテキストを使用してそれらを設定すると、それらのテーブルで異なる結果が得られますか? すなわちTable1
、と同じcontext.table1.ToList()
でしょうか?もしそうなら、どの実装を使用する必要がありますか?
sql - テーブルの更新中にアプリケーションがフリーズしています
1 時間ごとに実行される更新クエリがあります。実行するとシステムがフリーズし、誰も作業できなくなります。この問題を解決する方法
私のクエリは次のとおりです。
(nolock)を使用しましたが、フリーズします。何をすべきか
sql - 挿入/更新の後に select (nolock) を実行すると、同じデータで予期しない結果が生じる可能性がありますか?
ストアド プロシージャでは、
同じレコードで挿入/更新に続いて選択 (nolock) を実行すると、予期しない結果が生じる可能性がありますか?
(完全な) 更新/挿入されたレコードを常に取得しますか?
よろしくお願いします。
sql-server - SQL SERVER、(TABLOCKX) を使用したクエリは (NOLOCK) を使用した場合よりも高速に選択されますか、またはその逆ですか?
上記の質問がありました。アプリケーション全体で nolock を使用しています。場合によっては、結果がどうであれ、より速く選択する必要があります。
それでselect with(TABLOCKX)
速くなりますかwith(nolock)
?
sql - HSQLDB を使用した NOLOCK を使用するステートメントでの不適切な SQL 文法
私はHSQLDBNOLOCK
を使用しており、クエリに含まれる選択ステートメントを実行しようとしています。
ステートメントが実行されると、 aBadSqlGrammarException
がスローされます。
コマンドは SQL Server で完全に正常に動作するため、この問題を回避する方法はありますか?