it-swarm.asia

Apa itu eskalasi kunci?

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

49
Kilhoffer

Kunci DB dapat 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 online) 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 menyisipkan 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 maksimum yang diperbolehkan dari kunci, ini mungkin ditukar dengan kunci di seluruh tabel.

21
Bill the Lizard

SQL Server melakukan Mengunci Eskalasi untuk mengurangi overhead memori , dengan mengonversi beberapa kunci tingkat rendah berbutir halus hingga kunci tingkat tinggi berbutir kasar.

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

Ini 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.

Ambang Eskalasi Kunci setidaknya 5000 kunci, dan tergantung pada beberapa faktor, penjelasan terperinci tentang Eskalasi Kunci telah disebutkan di sini di MSDN BoL: - https://technet.Microsoft.com/en-us/library/ms184286 (v = sql.105) .aspx

12
Manoj Pandey

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 menjadi "eksklusif" untuk melakukan pembaruan.

5
Richard T