Saya ditanya pertanyaan ini di sebuah wawancara dan tidak punya jawaban. Adakah yang bisa menjelaskan di sini?
Saya ditanya pertanyaan ini di sebuah wawancara dan tidak punya jawaban. Adakah yang bisa menjelaskan di sini?
Kunci DB bisa ada pada baris, halaman atau seluruh tabel atau indeks. Ketika transaksi sedang berlangsung, kunci yang dipegang oleh transaksi mengambil sumber daya. Eskalasi kunci adalah di mana sistem mengkonsolidasikan banyak kunci ke tingkat yang lebih tinggi (misalnya mengkonsolidasikan beberapa kunci baris ke satu halaman atau beberapa halaman ke seluruh tabel) biasanya untuk memulihkan sumber daya yang diambil oleh sejumlah besar kunci berbutir halus.
Ini akan melakukan ini secara otomatis, meskipun Anda dapat mengatur bendera pada tabel (lihat ALTER TABEL di buku on line) untuk mengontrol kebijakan untuk eskalasi kunci pada tabel tertentu. Secara khusus, eskalasi kunci yang terlalu dini atau terlalu bersemangat dulunya merupakan masalah pada versi Sybase dan SQL Server yang lebih lama ketika Anda memiliki dua proses menulis baris terpisah ke halaman yang sama secara bersamaan. Jika Anda kembali cukup jauh (IIRC SQL Server 6.5) SQL Server sebenarnya tidak memiliki penguncian baris tetapi hanya bisa mengunci tabel atau halaman. Di mana ini terjadi, Anda bisa mendapatkan pertikaian antara sisipan catatan di halaman yang sama; seringkali Anda akan meletakkan indeks berkerumun di atas meja sehingga sisipan baru pergi ke halaman yang berbeda.
Ini adalah metode untuk mengurangi overhead sistem, dengan mengubah banyak kunci berbutir halus menjadi lebih sedikit berbutir kasar. Informasi lebih rinci dapat ditemukan di sini dan di sini .
Misalnya, jika Anda memiliki banyak (biasanya ratusan atau lebih) kunci pada baris tertentu dalam sebuah tabel, setelah Anda melebihi jumlah kunci maksimum yang diizinkan, ini mungkin ditukar dengan kunci di seluruh tabel.
sumber
SQL Server melakukan Kunci Eskalasi untuk mengurangi overhead memori , dengan mengubah beberapa kunci level rendah berbutir halus menjadi kunci level tinggi berbutir kasar.
Adalah mitos bahwa kunci Row ditingkatkan ke kunci halaman , yang sama disebutkan di atas oleh @ConcernedOfTunbridgeWells salah.
Jika tabel memiliki sangat sedikit pembaruan baris, mesin SQL akan mencoba mengambil Row-Locks pada baris tersebut atau Page-Lock pada halaman tersebut. Katakanlah itu telah mengambil Row-Lock. Tetapi jika pembaruan baris meningkatkan ambang (~ 5k mengunci) maka alih-alih mengambil beberapa Row-Locks dibutuhkan Table-Lock tunggal. Dengan demikian, ini mengurangi overhead memori dengan merilis beberapa Row-Locks dan mengambil Table-Lock tunggal, tetapi meningkatkan konkurensi. Hal yang sama terjadi dengan kunci Halaman.
The ambang batas Lock Eskalasi adalah di-setidaknya 5000 kunci, dan tergantung pada beberapa faktor, penjelasan rinci dari Lock Eskalasi telah disebutkan di sini di MSDN Bol: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx
sumber
Eskalasi kunci berarti konversi kunci ke mode yang lebih ketat. Ini paling sering terlihat di database. Kueri mungkin memiliki sumber daya yang dikunci untuk "dibagikan" dan meningkatkannya ke "eksklusif" untuk melakukan pembaruan.
sumber