Jika terjadi beberapa pembaruan dari catatan yang sama dalam satu transaksi, berapa banyak versi yang disimpan?

11

Menurut artikel MSDN oleh Kimberly L. Tripp, Neal Graves's " SQL Server 2005 Row Version-Based Transaction Isolasi Isolasi

  • "... Semua versi sebelumnya dari catatan tertentu dirantai dalam daftar yang ditautkan; dan dalam kasus transaksi berbasis versi baris yang berjalan lama, tautan tersebut harus dilintasi pada setiap akses untuk mencapai versi konsisten yang transaksional dari transaksi. baris"

yang ada di bagian "Memahami Versi Baris" umum untuk mengikuti bagian "Versi Baris di Baca yang Dilakukan Menggunakan Versi Baris" dan "Versi Baris dalam Isolasi Foto".

Selanjutnya pada contoh versi-baris karena modifikasi diberikan dalam konteks beberapa pembaruan dari catatan yang sama dengan beberapa transaksi (T1, T2, T3) hanya di SNAPSHOT.

Jika hanya satu transaksi yang memperbarui catatan beberapa kali (dengan banyak pernyataan), akankah beberapa toko versi disimpan (ditautkan) atau hanya yang diambil pada saat "gambar" SNAPSHOT diambil?

Nah, jawaban untuk pertanyaan ini harus segera menjawab pertanyaan terkait saya yang tertunda:

Tahan debu
sumber

Jawaban:

11

Jika terjadi beberapa pembaruan dari catatan yang sama dalam satu transaksi, berapa banyak versi yang disimpan?

Hanya satu.

Pembaruan pertama ke baris menghasilkan versi baris dan secara eksklusif mengunci baris. Pembaruan berikutnya untuk baris yang sama dalam transaksi yang sama tidak menghasilkan versi baris baru.


Daftar versi baris yang ditautkan dapat muncul sebagai berikut:

  • Transaksi T1 dalam transaksi SNAPSHOT membaca baris dan melihat nilai 'a'.

  • T2 Transaksi (di bawah tingkat isolasi apa pun) memperbarui nilai dari 'a' ke 'b' dan melakukan. Ini menghasilkan versi baris untuk nilai 'a'.

  • Transaksi T3 (di bawah tingkat isolasi apa pun) memperbarui nilai dari 'b' ke 'c' dan berkomitmen. Ini menghasilkan versi baris untuk nilai 'b'. Versi baris ini menghubungkan ke versi baris sebelumnya untuk 'a'.

  • Transaction T1 membaca nilai baris dengan melintasi tautan dari nilai yang tersimpan di halaman saat ini ('c'), ke versi baris 'b', dan kemudian kembali ke versi baris 'a'.

Versi baris dihasilkan oleh perubahan data terlepas dari apakah ada transaksi pembacaan yang ada (pada tingkat isolasi apa pun). Versi mungkin tidak pernah diperlukan, tetapi masih dihasilkan - daftar versi tertaut yang sama dibuat bahkan tanpa T1 transaksi.

Paul White 9
sumber