Kunci bersama diambil di bawah Read Committed Snapshot Isolasi (RCSI)


9

Saya melihat menunggu kunci bersama ( LCK_M_S) saat menggunakan RCSI. Pemahaman saya adalah bahwa ini tidak seharusnya terjadi karena SELECTstidak memerlukan kunci bersama saat menggunakan RCSI.

Bagaimana saya bisa melihat kunci bersama? Apakah karena kunci asing?


bolehkah saya juga bertanya, apakah sql server menempatkan kunci bersama pada catatan jika tidak ada indeks bahkan jika read_committed_snapshot dihidupkan?
grassbl8d

Jawaban:


13

Bagaimana saya bisa melihat kunci bersama? Apakah karena kunci asing?

Iya. SQL Server kembali ke implementasi penguncian tingkat isolasi yang dilakukan saat membaca ketika mengakses tabel untuk tujuan memvalidasi batasan kunci asing. Ini diperlukan untuk kebenaran , dan tidak dapat dinonaktifkan.

Perilaku hanya berlaku untuk pernyataan modifikasi data. Kunci bersama hanya diambil saat memeriksa data terkait kunci asing. Akses data lain dalam paket eksekusi yang sama dapat terus menggunakan versi baris.

Jika SQL Server tidak melakukan ini, pernyataan modifikasi data di bawah RCSIdapat akhirnya melanggar batasan kunci asing karena pemeriksaan integritas menggunakan data yang kedaluwarsa (versi).

Sayangnya, saat ini tidak ada cara yang didukung untuk melihat perubahan ini dalam perilaku penguncian dalam rencana eksekusi. Dimungkinkan untuk melihat petunjuk penguncian internal ketika jejak flag 8607 aktif.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.