1. ホーム
  2. sql-server

[解決済み】READ UNCOMMITTED分離レベルを使用する理由は?

2022-04-02 08:51:27

質問

を使うことのデメリットとメリットをわかりやすく教えてください。

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

は、.NET アプリケーションおよびレポーティング・サービス・アプリケーションのクエリで使用できますか?

解決方法は?

この分離レベルではダーティリードが可能です。あるトランザクションは他のトランザクションによって行われたコミットされていない変更を見ることができます。

最高レベルの分離を維持するために、DBMSは通常データに対するロックを取得します。これは、並行性の損失と高いロック・オーバーヘッドをもたらす可能性があります。この分離レベルはこの性質を緩和します。

をチェックしておくとよいでしょう。 ウィキペディアの READ UNCOMMITTED をご覧ください。


また、ジェフ・アトウッド(Jeff Atwood)の ブログ記事 Stack Overflowの初期の頃、彼と彼のチームがどのようにデッドロックの問題に取り組んだかについてです。Jeffによると

しかし、それは nolock 危険? になってしまう可能性があります。 で無効なデータを読み込んでしまう。 read uncommitted をつけるか?はい、理論的にはそうです。あなたは データベース アーキテクチャの宇宙飛行士が ACIDサイエンス が、ビルの火災報知器を鳴らすと を試したいと伝えると nolock . たしかに、理論は怖いですね。でも 私が思うに、理論的には、次のようなことが言えます。 との間に差はない。 実践することです。実践ではそうです。

を使うことは決してお勧めしません。 nolock 一般的な "病気に効く "方法として。 データベース デッドロックの問題が発生する可能性があります。あなたは を診断してみる必要があります。 まず、問題を解決してください。

しかし、実際には nolock を、単純でわかりやすい読み取り専用だとわかっているクエリに追加しても、問題になることはないようです...。 自分が何をやっているか分かっている限りはね。

の代替案として READ UNCOMMITTED レベルを検討するとよいでしょう。 READ COMMITTED SNAPSHOT . 再びジェフを引用します。

スナップショットは、まったく新しいデータ変更追跡方法に依存しています。わずかな論理的な変更にとどまらず、サーバーが物理的に異なる方法でデータを処理する必要があります。この新しいデータ変更追跡方法を有効にすると、すべてのデータ変更のコピー、つまりスナップショットが作成されます。 競合時にライブデータではなく、これらのスナップショットを読み込むことで、読み込み時に共有ロックが不要になり、データベース全体のパフォーマンスが向上する可能性があります。