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

眺める: 44050|答える: 3

[出典] Entity Framework クエリ最適化 WITH(NOLOCK)

[リンクをコピー]
2021年1月6日 14:52:16に投稿 | | | |
まず第一に、この記事とクエリ性能を向上させるためにWITH(NOLOCK)を追加しても問題ありません代わりに、データはトランザクションの隔離メカニズムを通じて読み込まれます。

SQL Serverのデータベースでは、同じデータベーステーブルが頻繁に読み書きされる場合、ロック問題が発生します。つまり、前の挿入、更新、削除のトランザクションが完了するまで読み取れず、選択操作を行うために操作が完了するまで待たなければなりません。これにより、並行操作を防ぎ、汚れたデータを読み取るのを防ぎます。

SELECT文をWITH(NOLOCK)でブロックデッドロックを解決します。

手記:WITH(NOLOCK)を使用するとデータ読み取りが汚れてしまいます

efは生成されたSQL文を表示します
https://www.itsvse.com/thread-3813-1-1.html
テストコードは以下の通りです:

Func delegate を使ってコードを以下のようにパッケージ化します:

その結果得られるSQL文は以下の通りです:

2021-01-06 14:32:09.9505 [スレッド] DEBUG DEBUG LogCenter - sql文:SELECT TOP (1)
    [エクステント1]。 [ID] [ID]として、
    [エクステント1]。 [名前] AS [名前]
    [DBO]より。 [イツヴセ] AS [拡張1]
    ここで ([Extent1].[ 名前 = @p__linq__0) または (([Extent1].[ 名前はNULLです)および(@p__linq__0はNULLです))
2021-01-06 14:32:09.9515 [スレッド] DEBUG DEBUG LogCenter - sql文:

2021-01-06 14:32:09.9525 [スレッド] DEBUG DEBUG LogCenter - sql文: -- p__linq__0: 'itsvse.com' (タイプ=文字列、サイズ=4000)

2021-01-06 14:32:09.9525 [スレッド] DEBUG DEBUG LogCenter - sql文:-- 実行中 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [スレッド] DEBUG DEBUG LogCenter - sql文:-- 結果:SqlDataReaderで1ミリ秒で完了

2021-01-06 14:32:09.955 [スレッド] DEBUG DEBUG LogCenter - sql文:

2021-01-06 14:32:09.9555 [スレッド] DEBUG DEBUG LogCenter - sql文:2021-01-06 14:32:09 +08:00に接続を閉じました
Selectクエリにはnolockキーワードが含まれていません。

(終わり)





先の:.NET/C#はBlockingCollectionに基づくシンプルなログを実装しています
次に:.NET(CLS)公開言語仕様
 地主| 2021年1月6日 14:53:17に投稿 |
使用方法:Global.csのApplication_Start()に次の文を追加すると、生成されたSQLは自動的に(nolock)で追加されます。
//ef命令拦截器
DbInterception.Add(新設WithNoLockInterceptor());
SQL文をロックする必要がある場合は、次の拡張子を追加します。


1. 特別な状況下でインターネット上で提供される正規表現の誤り問題を修正

 地主| 2021年1月10日 10:27:32に投稿 |
SQLスクリプトのテスト:

検査結果:

デフォルトではトランザクションが追加されず、デフォルトの隔離レベルは正しいです:



持続時間:17561ミリ秒

IsolationLevel.ReadUncommitdのアイソレーションレベルは、以下の画像に示されています:



時間:519 ms

源:



 地主| 2023年5月2日 11:45:35に投稿 |
ADO.NET 設定は汚れた読み物を許可しています未コミットを読む、コードは以下の通りです:


別の書き方もあります。dapperコードは以下の通りです:

両方のライティングテストに問題はありません。最初のものを直接使うことが推奨されます!!!


その他の書き方:



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

Mail To:help@itsvse.com