Bagaimana saya bisa membuktikan NOLOCK adalah sumber masalah yang menemui jalan buntu?

8

Saya tidak mencoba memulai diskusi jenis windows / mac.

Secara pribadi, saya tidak perlu meyakinkan bahwa NOLOCKitu bukan ide yang baik sebagai praktik refleksif. Sepertinya saat Anda mengembangkan semuanya harus bertujuan bukan reaksioner (/ amin)

Jadi ... programmer-in-charge menegaskan NOLOCKadalah cara untuk pergi. Merekomendasikan dengan semua permintaan ad-hoc dan setiap kali meminta produksi. Saya belum melihat prosedur tersimpan tanpa petunjuk nolock di setiap tabel.

Tidak ingin menjadi lelaki yang datang dan memberi tahu semua orang bahwa keyakinan inti adalah salah tanpa dukungan.

Hanya dengan melihat sesi komentar di bawah berbagai posting blog, mengirim tautan mungkin tidak cukup. Keyakinan lama dll. Beberapa orang tidak yakin itu masalah. Lihat: Bagian komentar di bawah setiap posting blog nolock yang saya baca.

Saat ini beberapa DBA lain sedang bergulat dengan beberapa kebuntuan misterius. Bagaimana cara menentukan apakah NOLOCKs adalah sumber?

Disarankan melihat XML dari jejak dll, tetapi ini tidak akan secara eksplisit menyatakan bahwa kebuntuan menyebabkan masalah, bukan? Saya belum pernah melihat pesan kesalahan yang lurus ke depan. Benarkah?

Bagaimana lagi jalan buntu ini dapat disematkan pada ini?

Pernyataan seperti DDL CREATEakan menjadi petunjuk. Apakah ada output yang bisa saya tunjukkan atau sepotong data yang bisa saya temukan yang akan membantu menguatkan teori saya sebelum saya menaikkan alarm?

Atau apakah saya menjalankan tanda jejak atau peristiwa yang diperluas untuk mengidentifikasi apa yang berjalan ketika deadlock terjadi dan kemudian disimpulkan dari pernyataan DDL?

Melihat semua cara data yang berbeda dapat dikacaukan dengan petunjuk nolock, sepertinya masalah yang sulit untuk dijabarkan dengan pasti.

pengguna238855
sumber

Jawaban:

16

Arsitek yang bertanggung jawab bagaimana bersikeras NOLOCKadalah cara untuk pergi. Merekomendasikan dengan semua permintaan ad-hoc dan setiap kali meminta produksi. Saya belum melihat sproc tanpa petunjuk nolock di setiap meja.

Turut sedih. Ini cukup baik secara universal dianggap sebagai anti-pola di antara praktisi SQL Server ahli, tetapi mungkin tidak ada yang dapat Anda lakukan untuk mengubah fakta di lapangan jika praktik tersebut benar-benar tertanam, dan didasarkan pada keyakinan seseorang yang tulus dan dipegang teguh. .

Pertanyaannya mengatakan bahwa "mengirim tautan mungkin tidak cukup", tetapi tidak jelas apa yang Anda inginkan. Kami dapat menulis argumen paling meyakinkan di dunia dalam jawaban di sini, dan Anda masih akan dibiarkan "mengirimkan tautan" ke sana. Pada akhirnya, tidak ada seorang pun di sini yang dapat mengetahui set argumen mana yang akan berhasil dalam situasi spesifik Anda (jika ada).

Namun demikian, berikut ini mencakup sebagian besar poin yang beberapa orang merasa cukup persuasif untuk mengubah praktik yang sebelumnya umum:

Meski begitu, Anda mungkin tidak bisa 'memenangkan' pertempuran ini. Saya telah bekerja di lingkungan yang melakukan ini, memahami risiko dan alasan untuk tidak melakukannya, tetapi tetap melakukannya. Mereka adalah orang-orang yang cerdas dan logis, tetapi pada akhirnya itu adalah lingkungan yang saya tidak bisa senang bekerja di dalamnya.

Saat ini beberapa DBA lain sedang bergulat dengan beberapa kebuntuan misterius. Bagaimana seseorang menentukan itu NOLOCKsadalah sumbernya.

Pola yang lebih umum (mungkin lebih lazim di masa lalu) dalam NOLOCKisyarat diperkenalkan dalam upaya untuk mengurangi kejadian kebuntuan. Ini bisa 'berhasil' karena mengurangi jumlah kunci bersama yang diambil secara alami mengurangi kemungkinan kunci tidak kompatibel diambil, tetapi itu bukan solusi yang baik untuk masalah yang mendasarinya, dan dilengkapi dengan semua peringatan yang dicatat di bagian sebelumnya.

Namun demikian, NOLOCKpetunjuk dapat memperkenalkan cara-cara baru untuk menemui jalan buntu. Menggunakan isolasi tanpa komitmen baca dapat menghapus kondisi pemblokiran transien (diselesaikan ketika sumber daya yang diperjuangkan tersedia) menjadi jalan buntu yang tidak dapat diselesaikan (di mana tidak ada pelayan yang dapat membuat kemajuan) hanya karena pertengkaran sekarang terjadi pada titik yang berbeda, di mana misalnya operasi penulisan dalam urutan yang berbeda tumpang tindih. Dave Ballantyne memiliki contoh di sini:

Untuk saran yang lebih umum tentang berurusan dengan deadlock, saya merekomendasikan yang berikut ini sebagai titik awal:

Anda juga harus membiasakan diri dengan dokumentasi:

Sumber daya bermanfaat lainnya:

Paul White 9
sumber
5
"Meski begitu, kamu mungkin tidak bisa 'memenangkan' pertempuran ini. Aku telah bekerja di lingkungan yang melakukan ini, memahami risiko dan alasan untuk tidak melakukannya, tetapi tetap melanjutkannya. Ini adalah orang-orang yang cerdas, logis, tetapi pada akhirnya itu adalah lingkungan yang membuatku tidak senang bekerja. " Ini terbukti sebagai jawaban yang benar.
user238855