Apa itu eskalasi kunci?

47

Saya ditanya pertanyaan ini di sebuah wawancara dan tidak punya jawaban. Adakah yang bisa menjelaskan di sini?


sumber

Jawaban:

45

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.

ConcernedOfTunbridgeWells
sumber
3
Perlu juga dicatat bahwa kami tidak memiliki kendali atas kapan server meningkat.
Kita lakukan sekarang. Itu panggilan T1211.
Joshua
@ Yosua, jejak bendera 1211 digunakan untuk menonaktifkan eskalasi kunci. Tidak ada cara bagi kami untuk memberitahu SQL Server untuk meningkat pada waktu tertentu.
Baru belajar
10
Kunci baris tidak ditingkatkan ke Page Locks, tetapi langsung ke Table locks.
Manoj Pandey
Memang benar apa yang dikatakan Manoj. Anda harus memperbaiki bagian itu dalam jawaban Anda untuk menghindari
kesalahan
20

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.

Bill the Lizard
sumber
11

SQL Server melakukan Kunci Eskalasi untuk mengurangi overhead memori , dengan mengubah beberapa kunci level rendah berbutir halus menjadi kunci level tinggi berbutir kasar.

  • Row Locks selalu ditingkatkan ke Table Locks, dan
  • Page Locks juga ditingkatkan ke Table Locks.

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

Manoj Pandey
sumber
5

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.

Richard T
sumber