Saya sangat baru dalam SQL Server, dan ingin memahami apakah pernyataan berikut yang sangat sederhana ini select
akan mengambil kunci apa pun.
Select * from Student;
Harap perhatikan kasus di mana pernyataan tidak akan berjalan di dalam begin tran
blok.
sql-server
sql-server-2008
locking
Pengembang Baru
sumber
sumber
Jawaban:
Ya itu memang mengambil kunci bersama pada baris yang dibaca secara default (itu juga mengambil kunci Bersama Intent pada semua halaman indeks berkerumun yang akan dibaca), ini dilakukan untuk mencegah pembacaan kotor. Namun ada cara untuk memotong ini (SQL Server memiliki petunjuk nolock). Jika pernyataan tidak dalam BEGIN TRAN, kunci dilepaskan setelah pernyataan SELECT dijalankan.
Info lebih lanjut dapat ditemukan di sini:
http://msdn.microsoft.com/en-us/library/ms184286(v=sql.105).aspx http://www.sqlteam.com/article/introduction-to-locking-in-sql-server
sumber
Ini adalah kesalahpahaman umum bahwa
SELECT
permintaan berjalan padaREAD COMMITTED
tingkat isolasi transaksi default akan selalu mengambil kunci bersama untuk mencegah pembacaan kotor.SQL Server dapat menghindari pengambilan kunci tingkat baris bersama ketika tidak ada bahaya membaca data yang tidak dikomit tanpa mereka (meskipun kunci Intent-Shared (IS) tingkat tinggi masih diambil).
Bahkan jika bersama baris kunci yang diambil (mungkin karena transaksi konkuren lain telah memodifikasi halaman baris adalah pada) mereka dapat dilepaskan jauh sebelum
SELECT
Selesaikan pernyataan.Dalam kebanyakan kasus, baris 'tidak terkunci' tepat sebelum server memproses baris berikutnya. Ada keadaan di mana kunci bersama diambil pada tingkat isolasi default diadakan sampai akhir pernyataan saat ini, tetapi tidak sampai akhir transaksi .
Mengganti level isolasi saat ini dengan
NOLOCK
petunjuk tabel hampir selalu merupakan ide yang buruk .Mengunci adalah detail implementasi. SQL Server mengambil kunci ketika diperlukan untuk memastikan memenuhi jaminan semantik yang disediakan oleh tingkat isolasi saat ini . Memang ada saat-saat di mana berguna untuk mengetahui sedikit tentang mengapa kunci diambil, tetapi upaya untuk memperkirakannya sering kali tidak produktif.
SQL Server menyediakan berbagai tingkat isolasi; pilih salah satu yang memberikan jaminan dan perilaku data yang dibutuhkan konsumen.
sumber