Menjalankan "" permintaan gagal dengan kesalahan berikut: "Indeks" "(partisi 1) pada tabel" "tidak dapat ditata ulang karena penguncian tingkat halaman dinonaktifkan."
Rencana pemeliharaan harus mencoba ALTER INDEX REORGANIZE, yang merupakan operasi online. Untuk menghapus fragmentasi (halaman tidak berurutan), halaman harus dikunci dan dipindahkan, yang tidak mungkin jika kunci halaman telah dinonaktifkan. Satu-satunya cara untuk defragment tanpa kunci halaman adalah dengan mengunci seluruh partisi, yang tidak mungkin untuk REORGANIZE sebagai hanya online.
Apa perbedaan antara dua skema penguncian, dan apa konsekuensi dunia nyata (dalam produksi)?
Anda perlu memahami apa catatan dan halaman untuk mengevaluasi dampak dari menolak jenis kunci tertentu. Jika Anda tidak terbiasa dengan penyimpanan internal SQL Server, mulailah dengan Anatomi Rekaman dan Anatomi Halaman . Sederhananya:
- baris = catatan
- baris disimpan di halaman 8kb
Jika Anda mengubah jenis kunci yang diizinkan:
- Nonaktifkan kunci halaman = Hanya kunci baris dan tabel
- Nonaktifkan kunci baris = Hanya kunci halaman dan tabel
- Nonaktifkan keduanya = Kunci meja saja
Ada dua skenario yang saya ketahui di mana dapat bermanfaat untuk melarang jenis kunci. Tidak berarti tidak ada orang lain, semoga orang lain memberikan contoh.
Tabel pencarian yang sering diakses, yang jarang berubah - Dengan menonaktifkan kunci level halaman dan baris, semua pembaca akan mengambil kunci tabel bersama. Ini lebih cepat / lebih murah daripada maksud yang dibagi bersama di atas meja, diikuti dengan maksud yang dibagikan di halaman dan akhirnya kunci bersama di baris atau baris tertentu.
Mencegah skenario kebuntuan tertentu - Jika Anda menemukan kebuntuan yang disebabkan oleh proses bersamaan yang mendapatkan kunci yang sering ada di halaman yang sama, jika tidak diblokir, kunci baris akan menghasilkan kunci halaman yang diambil. Hanya satu proses yang kemudian dapat mengakses halaman sekaligus, yang lain harus menunggu.
Contoh pertama adalah optimasi mikro dan tidak mungkin untuk menghasilkan manfaat yang terukur pada sistem yang khas. Yang kedua akan menyelesaikan skenario jalan buntu tertentu tetapi dapat memperkenalkan efek samping yang tidak terduga misalnya membunuh konkurensi di bagian kode yang berbeda. Sulit menilai dampak sepenuhnya, pendekatan dengan hati-hati!
Defaultnya adalah keduanya diaktifkan dan ini tidak boleh diubah tanpa alasan yang baik.