Menemukan tingkat isolasi default di SQL Server 2017 dan Azure SQL DB

9

Saya membaca buku yang berkaitan dengan transaksi dan konkurensi. Dalam satu paragraf disebutkan bahwa:

  • Dalam contoh SQL Server lokal, tingkat isolasi default adalah Read-Committed berdasarkan penguncian

Dan kalimat selanjutnya adalah:

  • Default dalam SQL Database adalah Read - snapshot yang dilakukan berdasarkan pada baris-versi

Pertanyaan saya adalah: apa perbedaan antara "Contoh SQL Server lokal" dan "Database SQL" dalam dua kalimat ini?

Apa tingkat isolasi standar dan bagaimana saya bisa menemukannya? Apakah ada permintaan khusus untuk mengetahui tingkat isolasi default?

Erik Darling
sumber

Jawaban:

13

Ini merujuk ke Azure SQL Database yang menggunakan RCSI secara default .

Tingkat Isolasi SQL

Basis data pengaturan lebar basis data default adalah untuk mengaktifkan RCSI (read snapshot isolation) dengan memiliki opsi basis data READ_COMMITTED_SNAPSHOT dan ALLOW_SNAPSHOT_ISOLATION yang disetel ke ON, pelajari lebih lanjut tentang level isolasi di sini . Anda tidak dapat mengubah level isolasi standar basis data. Namun, Anda dapat mengontrol level isolasi secara eksplisit pada koneksi.

Di SQL Server lokal, level isolasi default adalah Read Committed.

Menemukan tingkat isolasi "default" adalah sedikit pengejaran. Itu akan tergantung pada basis data dari mana permintaan dimulai, dan jika ada petunjuk dalam permintaan untuk mengesampingkan pengaturan tingkat basis data.

Yang mengatakan, Anda bisa meminta sys.databasesuntuk mengetahui apakah RCSI atau SI diaktifkan.

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

Perhatikan bahwa READ_COMMITTED_SNAPSHOTsecara teknis ini bukan tingkat isolasi. Alih-alih, ini adalah opsi database yang mengontrol implementasi sehingga versi baris alih-alih penguncian digunakan untuk memberikan konsistensi baca untuk sesi menggunakan READ_COMMITTEDtingkat isolasi.

Erik Darling
sumber