SQL Server 2017およびAzure SQL DBでの既定の分離レベルの検索


9

トランザクションと並行性に関する本を読んでいます。1つの段落では、次のように述べられています。

  • オンプレミスのSQL Serverインスタンスでは、デフォルトの分離レベルはロックに基づいて読み取りコミットされています

そして次の文は:

  • SQLデータベースのデフォルトは読み取りです-行のバージョン管理に基づいてコミットされたスナップショット

私の質問は、これらの2つの文で「オンプレミスSQL Serverインスタンス」と「SQLデータベース」の違いは何ですか?

デフォルトの分離レベルとは何ですか?どのようにして見つけることができますか?デフォルトの分離レベルを確認するための特別なクエリはありますか?

回答:


13

これは、デフォルトでRCSIを使用するAzure SQLデータベースを指します

分離レベルSQL

データベースのデフォルトのデータベース全体の設定では、READ_COMMITTED_SNAPSHOTとALLOW_SNAPSHOT_ISOLATIONの両方のデータベースオプションをONに設定して、コミット読み取りスナップショット分離(RCSI)を有効にします。分離レベルの詳細については、こちらをご覧ください。データベースのデフォルトの分離レベルは変更できません。ただし、接続で分離レベルを明示的に制御できます。

オンプレミスのSQL Serverでは、デフォルトの分離レベルはRead Committedです。

「デフォルト」の分離レベルを見つけることは、ガチョウ追跡のビットです。これは、クエリが開始されたデータベース、およびデータベースレベルの設定を上書きするヒントがクエリに存在するかどうかによって異なります。

つまり、sys.databasesRCSIまたはSIが有効になっているかどうかを確認するためにクエリを実行できます。

SELECT d.name, 
       d.is_read_committed_snapshot_on, 
       d.snapshot_isolation_state
FROM sys.databases AS d;

READ_COMMITTED_SNAPSHOT技術的には分離レベルではないことに注意してください。むしろ、これは実装を制御するデータベースオプションであり、ロックではなく行のバージョン管理を使用して、READ_COMMITTED分離レベルを使用するセッションの読み取りの一貫性を提供します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.