Saya punya tabel dalam database SQL Server dengan indeks berkerumun pada kunci utama. Tabel memiliki 1 juta baris. Jika saya menghapus 10K baris dari tabel, apakah indeks bisa direstrukturisasi selama operasi penghapusan dilakukan?
Operasi penghapusan adalah bagian dari prosedur tersimpan. Pada suatu waktu, lebih dari satu klien dapat menjalankan prosedur yang tersimpan, namun setiap proses individual akan menghapus rangkaian barisnya sendiri (diidentifikasi secara unik oleh kunci primer). Saya mendapatkan pemblokiran pada kunci kunci (tipe U) ketika beberapa klien menjalankan prosedur. Kunci pemblokir milik baris dari tabel yang sama dan itu bukan bagian dari transaksi yang berjalan bersamaan. Seharusnya tidak ada pemblokiran karena setiap proses mencoba menghapus kumpulan barisnya sendiri. Eskalasi kunci tidak terjadi karena dimatikan.
Saya menduga, operasi penghapusan harus menyebabkan indeks untuk menyeimbangkan kembali dan karenanya selama proses restrukturisasi dapat mengambil kunci kunci pada setiap baris tabel.
Saya akan sangat menghargai pendapat tentang ini.
sumber
Jawaban:
Untuk menjawab pertanyaan dalam judul, apakah pohon-B rebalanced selama penghapusan, jawabannya tampaknya tidak, setidaknya dalam kasus uji minimal berikut.
Demo berikut menjalankan perintah yang sebaiknya digunakan untuk lingkungan pengujian.
Demo ini menunjukkan bahwa penghapusan dapat menghasilkan b-tree yang sangat tidak seimbang, dengan hampir semua data di satu sisi.
sumber