架构师_程序员_码农网

ユーザー名 パスワード取得
会員登録

QQ登录

ワンステップ

検索
表示:9982|返信: 3
打印 上一主题 下一主题

[情報]データベースロック NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[コピーリンク]
への直接リフト跳转到指定楼层
オーナー
NOLOCK
このオプションをチェックすると、SQL Server はデータの読み取りまたは変更時にロックを追加しません。 この場合、ユーザはコミットされていないトランザクションやロールバックからのデータ、いわゆる "ダーティデータ "を読み込むことができます。

ホールドロック
このオプションをオンにすると、SQL Serverはトランザクション全体の終了まで共有ロックを保持します。

UPDLOCK
このオプションをチェックすると、SQL Serverはデータの読み取り時に共有ロックの代わりに変更ロックを使用し、トランザクション全体またはコマンドの終了までこのロックを保持します。このオプションにより、複数のプロセスが同時にデータを読み取ることができますが、そのプロセスだけがデータを変更できるようになります。

タブロック
このオプションをチェックすると、SQL Serverはコマンドの終了までテーブル全体に共有ロックをかけます。 このオプションは、他のプロセスが読み取りのみを行い、データを変更できないようにします。

PAGLOCK
このオプションはデフォルトのオプションです。 チェックすると、SQL Serverは共有ページ・ロックを使用します。

TABLOCKX (テーブル除外ロック)
このオプションをチェックすると、SQL Serverはコマンドまたはトランザクションが終了するまでテーブル全体に排他ロックをかけます。これにより、他のプロセスがテーブルのデータを読み取ったり変更したりすることができなくなります。

HOLDLOCK トランザクションが完了するまで共有ロックを保持し、ロックされたオブジェクトが不要になり次第、SERIALIZABLE トランザクション分離レベルと同じように解放する必要があります。

NOLOCK 文を実行すると共有ロックは発行されず、ダーティ・リードが可能になり、READ UNCOMMITTED トランザクション分離レベルと同じになります。

PAGLOCK テーブル・ロックが使用される場合、複数のページ・ロックが使用されます。

READPAST SQL Serverがロックされた行をスキップしてトランザクションを実行できるようにします。READ UNCOMMITTEDトランザクション分離レベルに適用され、ページ、リージョン、テーブル・ロックではなくRIDロックのみをスキップします。

ROWLOCK 行ロックの使用を強制します。

TABLOCKX トランザクションの間、他のトランザクションがテーブルを使用できないようにする排他的なテーブル・レベルのロックを強制的に使用します。

UPLOCK 共有ロックを使用せずにテーブルを読み込む際に更新を強制的に使用します。

注意: データベースにおけるテーブルのロックの違い
SELECT * FROM table WITH (HOLDLOCK) 他のトランザクションはテーブルを読むことができますが、更新や削除はできません。
SELECT * FROM table WITH (TABLOCKX) 他のトランザクションはテーブルを読み取れませんが、更新や削除はできません。




前へ:Win10リモートデスクトップ二画面表示
Next:.NET/C# based on Nethereum to create ETH wallet account and verify the password [with source code].
SQL Server のデッドロック問題を追跡するための拡張イベント SQL Server のデッドロック問題を追跡するための拡張イベント SQL Server のデッドロック問題を追跡するための拡張イベント SQL Server のデッドロック問題を追跡するための拡張イベント SQL Server のデッドロック問題を追跡するための拡張イベント SQL Server のデッドロック問題を追跡するための拡張イベント
SQLサーバー
銉娿儞
楼主| 发表于2021-1-14 16:53:24只看该作者
TABLOCKXロックのテスト

テストSQLは次のとおりです:


テスト c# コード:


私は、テーブル全体がロックされていることを発見し、トランザクションの実行が完了するのを待つだけで、データを照会することができます、次の図:



WITH(TABLOCKX)を削除し、Id 1のデータのみを更新し、以下のようにテストします:



タスク2とタスク4のクエリにはID1のデータが含まれないため、クエリは非常に高速ですが、3と4はクエリを実行する前にトランザクションの完了を待つ必要があります。

データ変更時の動作

行バージョン管理を使用するコミットされた読み取りトランザクションでは、更新する行の選択は、データ値が読み取られる際に更新ロック(Uロック)がデータ行に適用されるブロッキングスキャンを使用して行われます。 これは、行バージョン管理を使用しないコミットされた読み取りトランザクションと同じである。 データ行が更新条件を満たさない場合、その行の更新ロックは解放され、次の行がロックされてスキャンされる。

更新ロック(U):デッドロックの発生を防ぐロック・モード。 データ・リソースを読み取り、変更する2つのトランザクションの場合、共有ロックや排他ロックを使用するとデッドロックが発生することがあるが、更新ロックを使用するとデッドロックの発生を防ぐことができる。リソースの更新ロックは、一度に1つのトランザクションにしか割り当てることができません。 リソースを変更する必要がある場合、更新ロックは排他ロックになり、そうでない場合は共有ロックになります。

https://docs.microsoft.com/zh-cn/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide?view=sql-server-ver15#データ変更時の動作

コードファーマーネットワークは、唯一の練習の過程で公開され、技術的な困難に遭遇し、他の人を誤解させないでください。
ベンチ
楼主| 发表于2021-1-28 17:30:51只看该作者
質問

をudpateする
set column1 = 1
where idx = 1
sqlserverがupdate文を実行すると、テーブル全体がロックされますね?

分析してください:

テーブルの構造を見て、 主キーがない場合だけでなく、行をロックすることはできません
コード農家のネットワークは、唯一の練習の過程で公開され、技術的な困難に遭遇し、他の人を誤解させないでください。
uggブーツ セール
楼主| 发表于2023-5-2 11:47:24只看该作者
Entity Framework クエリの最適化 WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
楼主|发表于2023-5-2只看该作者Entity Frameworkクエリ最適化WITH(NOLOCK)。
投稿するにはログインが必要です ログイン会員登録

このバージョンのインテグラルルール


免責事項:コードファーマーネットワークによってリリースされたすべてのソフトウェア、プログラミング資料や記事は、研究と研究目的に限定され、上記のコンテンツは、商業的または違法な目的のために使用してはならない、そうでなければ、すべての結果は、ユーザーが責任をお願いします。このサイトの情報はネットワークから、著作権紛争は、このサイトとは何の関係もありません。あなたは完全にダウンロードしてから24時間以内にコンピュータから上記のコンテンツを削除する必要があります。あなたがプログラムを好きなら、本物のソフトウェアをサポートしてください、登録を購入し、より良い本物のサービスを得る。もし著作権侵害があれば、メールでご連絡ください。

メール To:help@itsvse.com

QQ|( 鲁ICP备14021824 号-2)|サイトマップ

GMT+8, 2024-9-19 00:22

クイック返信トップに戻る一覧に戻る