Saya sedang meneliti perbedaan antara SQL Server READ COMMITTED SNAPSHOT
dan SNAPSHOT
tingkat isolasi dan menemukan sumber daya berikut:
Memilih Tingkat Isolasi Berbasis Versi Baris
Untuk sebagian besar aplikasi, baca isolasi yang dilakukan menggunakan versi baris direkomendasikan daripada isolasi snapshot karena alasan berikut:
Ini mengkonsumsi ruang tempdb lebih sedikit daripada isolasi snapshot.
Isolasi snapshot rentan terhadap pembaruan konflik yang tidak berlaku untuk membaca isolasi yang dilakukan menggunakan versi baris. Ketika transaksi yang berjalan di bawah isolasi snapshot membaca data yang kemudian dimodifikasi oleh transaksi lain, pembaruan oleh transaksi snapshot ke data yang sama menyebabkan konflik pembaruan dan transaksi berakhir dan dibatalkan. Ini bukan masalah dengan isolasi yang dilakukan baca menggunakan versi baris.
Saya agak baru dalam topik ini, tetapi sepertinya saya tidak bisa memahami dua poin utama dari tautan di atas.
Mengapa ruang tempdb berbeda untuk mode ini? Apakah satu toko lebih banyak versi granular daripada yang lain?
Mengapa isolasi snapshot lebih rentan untuk memperbarui konflik?
sumber
Satu lagi perbedaan antara snapshot dan snapshot yang dibaca adalah sebagai berikut.
Di sesi pertama
SET TRAN ISOLATION LEVEL SNAPSHOT BEGIN TRAN SELECT * DARI TB1 ..... .....
Di sesi kedua
Perbarui TB1 SET NAME = NAME + 'test' Di mana id = 1
Di sesi pertama
PILIH * DARI TB1 - INI AKAN mengembalikan nama nilai untuk ID = 1, bukan nama + 'tes' KOMIT TRAN
Dalam snapshot yang sudah dibaca, pilih pertama pada sesi 1 akan mengembalikan nama untuk id = 1, dan pilih kedua akan mengembalikan nama + 'tes'.
Jadi dalam isolasi snapshot SQL SERVER melakukan snapshot di awal transaksi, dan membaca dari snapshot itu selama seluruh transaksi.
Dalam snapshot berkomitmen, snapshot diambil untuk setiap pernyataan SELECT selama transaksi.
sumber