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

眺める: 12282|答える: 0

[出典] SQL Serverはトランザクションの隔離レベルを設定します

[リンクをコピー]
掲載地 2021/02/05 11:53:34 | | | |
Entity Framework クエリ最適化 WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

データベースロック NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
SQL Serverにおけるトランザクションの隔離レベルと、ダーティリード、非再現リード、ファントムリードなど(コードの引数や時間シーケンス)との関係

データベースへの同時アクセスの場合に生じるこれらの問題を理解することで、私たちはデータベースの隔離レベルの概念を、一般の理解で理解し続けることができる。つまり、並行トランザクションをどのように、どの程度まで分離したいのか? 例えば、ダーティリードを許容できる場合や、同時トランザクションにダーティリードを避けたい場合は、これらのレベルをアイソレーションレベルに設定して、同時トランザクション間の分離を緩やかまたは厳しくすることができます。

隔離レベルが高いほど、汚れたデータや不完全なデータを読み取る可能性は低くなりますが、高並行性システムではパフォーマンスの低下はより深刻になります。 アイソレーションレベルが低いほど、並行システムのパフォーマンス向上は大きくなりますが、データ自体は不完全である場合があります。

SQL Server 2012では、トランザクションの隔離レベル(低い順から高い順)を以下の構文で設定できます:

トランザクション分離レベルを設定する
    { 未確定
    | コミットドを読んでください
    | 繰り返し読んでください
    | スナップショット
    | シリアライズ可能
    }
[ ; ]
まず、新しいテストスクリプトを作成し、データベースを作成し、テストデータを挿入します。以下のように。



新しいウィンドウAを作成するトランザクションを開き、更新操作を実行し、コミット前に10秒待つと、コードは以下の通りです。

新しいウィンドウBを作成するトランザクションをREAD UNCOMMITTED(未コミット読み取り、最下位レベル)設定します。簡単な問題はダーティーリーディングです。なぜなら、他のトランザクションによって修正されたデータは読み取れるがコミットされていないからです。 トランザクション内のSELECT文オブジェクトテーブルに(NOLOCK)を設定するのと同じことをします。 データをクエリすると、コードは以下の通りです:

新しいウィンドウCを作成する、 はデータを直接クエリし、次のように述べています:

順番にウィンドウA、B、Cを実行し、データを更新するとウィンドウBが即座にデータを返すことがわかります(読み取りが汚れたデータである可能性もありますCウィンドウはAウィンドウの実行が完了するのを待つ必要があります下図のようにデータを返します。


(窓B)


(窓C)

(終わり)





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

Mail To:help@itsvse.com