web-dev-qa-db-ja.com

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

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

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

そして次の文は:

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

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

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

8
user123215

これは Azure SQL Database を参照しており、デフォルトで RCSI を使用しています。

分離レベルSQL

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

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

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

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

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

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

12
Erik Darling