Saya kadang-kadang mendapatkan "Tidak dapat melanjutkan pemindaian NOLOCK
karena pergerakan data" dengan beberapa pekerjaan besar, yang ada WITH (NOLOCK)
pada kueri pemilihan.
Saya mengerti ini ada hubungannya dengan upaya memilih data ketika telah terjadi pemisahan halaman yang menyebabkan data tidak lagi berada di tempat yang seharusnya - saya berasumsi bahwa itulah yang terjadi di lingkungan saya.
Bagaimana saya mereproduksi ini?
Saya mencoba melakukan solusi jangka pendek untuk menangkap kesalahan dan coba lagi ketika ini terjadi, tetapi saya tidak bisa mengujinya jika saya tidak bisa memperbanyaknya. Apakah ada cara yang cukup dapat diandalkan untuk menyebabkan ini?
Ketika itu benar-benar terjadi, mengeksekusi kueri kembali menghasilkan kesuksesan - jadi saya tidak benar-benar khawatir tentang data aktual atau database yang rusak secara permanen. Beberapa tabel dalam kueri (beserta indeksnya) sering dijatuhkan, diciptakan kembali, dan dihuni kembali berulang kali, jadi saya berasumsi itu terkait dengan hal itu.
Menghapus NOLOCK
adalah masalah jangka panjang saya untuk ditangani. Alasannya NOLOCK
diletakkan di sana di tempat pertama adalah bahwa pertanyaannya sangat buruk sehingga mereka menemui jalan buntu dengan transaksi sehari-hari, jadi NOLOCK
adalah bantuan band untuk menghentikan kebuntuan (yang bekerja). Jadi saya memerlukan bantuan band pada bantuan band sampai kita dapat melakukan solusi permanen.
Jika saya bisa mereproduksinya dengan Hello World, saya akan berencana untuk mungkin menampar bantuan band ke dalam pekerjaan dalam waktu kurang dari satu jam. Tidak dapat melakukan pencarian-dan-ganti menghapus NOLOCK
, karena saya akan mulai mendapatkan kebuntuan aplikasi lagi, yang lebih buruk bagi saya daripada pekerjaan yang gagal sesekali.
Menggunakan isolasi snapshot yang sudah dibaca adalah kemungkinan yang baik - saya harus bekerja dengan tim database kami untuk mendapatkan detail lebih lanjut tentang itu. Bagian dari masalah kami adalah bahwa kami tidak memiliki ahli SQL Server untuk menangani hal semacam itu, dan saya tidak mengerti tingkat isolasi dengan cukup baik untuk membuat perubahan itu sekarang.
DEADLOCK_PRIORITY
ke LOW
dalam pekerjaan, sehingga jika ada deadlock, pekerjaan akan gagal, dan bukan aplikasi. Setelah itu, Anda bisa meneliti kebuntuan dan mencari tahu mengapa itu terjadi, dan memperbaiki masalah itu. Ini bisa menjadi perbaikan yang sangat sederhana, seperti menukar urutan dua pernyataan. Apapun masalahnya, NOLOCK
adalah bukan solusi , sehingga berhenti berusaha untuk memaksa hal itu terjadi hanya karena itulah yang paling mudah.
NOLOCK
dari pekerjaan ini? 601 seharusnya menjadi kekhawatiran Anda yang paling kecil jika hasil dari pertanyaan ini seharusnya akurat . Paul White menunjukkan contoh yang sangat buruk dari membaca data yang seharusnya tidak mungkin dilakukan di sini .