17

簡単な質問?READ_COMMITTED_SNAPSHOTがデフォルトでオンになっていないのはなぜですか?

READ_COMMITTED_SNAPSHOTがデフォルトでオンではないのはなぜですか?

後方互換性、パフォーマンス、またはその両方を推測していますか?

[編集]私は、READ_COMMITTED分離レベルに関連し、スナップショット分離レベルには関係しないことに注目しています。

なぜロックを保持していないにもかかわらず、コミットされていない行は読み込まれないため、これは改変になりますか?

答えて

15

両方。ほとんどの互換性。

デフォルトでスナップショットを有効にすると、古いブロック動作を予期する大多数のアプリケーションが破損します。スナップショットによりが重い tempdbをバージョンストアに使用するとパフォーマンスに与える影響はかなり正確です。

+5

多くのロックを多数使用しても、パフォーマンスには影響しません。 –

+2

「ブロッキング動作に依存している」アプリケーションをどのように壊すことができるか詳しく説明できますか?私は多くの研究をしており、どのようにこの結論に至ることができたかを見分けることはできません。 –

4

これは、Sybase/SQL Serverファミリが永久にどのように機能していたかに基づいて、デフォルトのロック方法を変更します。それは私のすべてのアプリケーション、私の店で知っているすべてのアプリケーションを壊し、多くの重要なデータを壊してしまいます。

Wikipedia article完全にを読んでください:あなたの銀行業務アプリケーションのコードでこの分離モデルを使用しますか?一般に

、従って、スナップショット 分離は潜在的な落とし穴のいずれか又は 可能な解決策を理解しないことがあり、ユーザへ 維持非自明な制約 の問題のいくつかを置きます。この の転送の最大のメリットはパフォーマンスの向上です。

ほとんどのデータベース設計のように妥協です。私のケースでは、ロック待ち/デッドロック(まれな)を、より簡単でより多くの「すぐに使える」データ整合性のための価格として扱うことができます。私はまだ解決策としてスナップショットアイソレーションを見ている問題や問題に出くわしました。

+2

READ_COMMITTED_SNAPSHOTがどのようにデータの破損を招くかについて詳しく説明できますか? –

18

デフォルトでオンにスナップショットをオンにすると、それはアプリケーションの「大半」が解除されます場合、それは私には不明であるアプリケーション

の大半を破ります。あるいは、識別しにくい、または回避するのが困難な方法で、多くのアプリケーションを壊す場合。 SQL Serverのマニュアルでは、READ COMMITTEDREAD COMMITTED SNAPSHOTの両方がANSIの定義READ COMMITTEDを満たしていると記載されています。 (コード:http://msdn.microsoft.com/en-us/library/ms189122.aspx)あなたのコードがリテラルなANSIが要求する動作以外のものに依存しない限り、理論上は大丈夫です。

複雑なのは、ANSI仕様では、一般的に人がダーティーリード、ファジー/リピート不可能な読み取りなどのことを実際に意味するものすべてをキャプチャしないということです。また、READ COMMITTED SNAPSHOTで発生する可能性のある異常(ANSI定義で許可されている)はREAD COMMITTEDの下では発生しません。たとえば、http://www.jimmcleod.net/blog/index.php/2009/08/27/the-potential-dangers-of-the-read-committed-snapshot-isolation-level/を参照してください。

http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/d1b3d46e-2642-4bc7-a68a-0e4b8da1ca1bも参照してください。

隔離レベルの相違点の詳細については、http://www.cs.umb.edu/cs734/CritiqueANSI_Iso.pdfREAD_COMMITTED_SNAPSHOTはこの文書が作成された時点ではありませんでしたが、他のレベルはそれに含まれています)で始まります。

+0

実際には(おそらく変更されている)、その答えは次のとおりです。_デフォルトでスナップショットを有効にすると、古いブロック動作** _を期待する大多数のアプリケーションが破損します。私の理解では、この悲観的なロック戦略に依存する既存のアプリケーションが存在し、ロックを取得するのを待っていると予想されます。 –

関連する問題