Saya melihat menunggu kunci bersama ( LCK_M_S
) saat menggunakan RCSI. Pemahaman saya adalah bahwa ini tidak seharusnya terjadi karena SELECTs
tidak memerlukan kunci bersama saat menggunakan RCSI.
Bagaimana saya bisa melihat kunci bersama? Apakah karena kunci asing?
sql-server
sql-server-2008
locking
snapshot-isolation
grassbl8d
sumber
sumber
Jawaban:
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
RCSI
dapat 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.
sumber