Meskipun kita semua tahu bahwa penguncian sangat penting untuk integritas data, itu tidak mengubah fakta bahwa penguncian dapat menjadi masalah serius bagi Anda!
Ketika kami melihat pemblokiran di database kami, kami sering menganggap ada sesuatu yang salah – itu tidak selalu terjadi. Dalam pengalaman saya, sebagian besar pemblokiran SQL Server adalah sah, tetapi perlu diselidiki dan dipahami. Kebuntuan, di sisi lain, jarang sah! Kebuntuan dianggap penting di dunia SQL Server karena proses terbunuh secara otomatis, karena SQL Server menyelesaikan kebuntuan tanpa memerlukan intervensi manual. Sekali lagi, meskipun "diselesaikan", mereka pasti perlu diselidiki dan dipahami.
Ada beberapa strategi desain yang dapat membantu mengurangi terjadinya pemblokiran SQL Server dan kebuntuan di database Anda:
- Gunakan indeks berkerumun pada tabel dengan penggunaan tinggi
- Hindari pernyataan SQL dengan jumlah baris tinggi
- Pisahkan transaksi yang panjang menjadi beberapa transaksi yang lebih pendek
- Pastikan bahwa pernyataan UPDATE dan DELETE menggunakan indeks
- Jangan jadwalkan tugas pembaruan batch agar tumpang tindih
- Selalu perbarui statistik Anda
Dan saya yakin masih banyak lagi, tetapi kenyataannya adalah Anda dapat mengikuti semua praktik terbaik yang dapat Anda pikirkan dan masih memiliki pemblokiran dan kebuntuan. Ini karena, dalam banyak kasus, kebuntuan disebabkan oleh kode aplikasi yang dirancang dengan buruk. (Lubang kelinci desain aplikasi:pengkodean, isolasi transaksi, dan pola akses. Namun untuk saat ini, mari fokus pada penyelidikan dan pemahaman pemblokiran dan kebuntuan).
Pemblokiran dan Kebuntuan SQL Server
Tantangan pertama dengan pemblokiran dan kebuntuan adalah untuk mengidentifikasi kapan dan di mana mereka terjadi karena mereka biasanya tidak dilaporkan, dilaporkan setelah fakta, atau diselesaikan secara otomatis. Untuk mendapatkan pemahaman nyata tentang apa yang terjadi di database Anda terkait pemblokiran dan kebuntuan, Anda perlu melihat kemunculannya dari waktu ke waktu. Selain itu, untuk memperbaiki masalah dan menghentikan kejadian di masa mendatang, Anda perlu mengetahui akar penyebab pemblokiran—mempersenjatai diri dengan informasi yang Anda butuhkan untuk menyampaikan kembali ke pengembang aplikasi dan dengan demikian mengakhiri permainan menyalahkan antara Pengembang dan DBA.
Inilah mengapa saya sangat menyukai Penganalisis Beban Kerja di Awan Sorotan. Saya dapat memilih rentang waktu – satu jam, satu hari, atau rentang khusus – dan melihat Kunci -aktivitas terkait untuk rentang tersebut. Langsung saja, saya memiliki pemahaman yang lebih baik tentang apa yang terjadi! Saya dapat melihat pola penguncian, membandingkan tingkat penguncian dari waktu ke waktu dengan rentang waktu sebelumnya, melihat tingkat pemblokiran selama jangka waktu tertentu, dan melihat KPI penguncian seperti Lock Exclusive, Shared, &Update.
Jadi sekarang saya ingin mengetahui akar masalahnya – di situlah Pohon Dimensi masuk. Saya dapat menelusuri dan memfilter informasi untuk jangka waktu tertentu, memungkinkan saya melihat informasi yang sama pada dimensi yang lebih dalam seperti Database , Pengguna , Program , dan Pernyataan SQL , sambil memfilter “white noise” saat saya melakukannya – mengidentifikasi dengan jelas sumber masalah saya.
Di sini saya melihat Database mengalami penguncian paling banyak selama rentang waktu tersebut:
Sekarang, saya akan menelusuri Pengguna dalam database yang dipilih:
Kemudian, saya akan memilih untuk melihat daftar Pernyataan SQL menyebabkan penguncian yang dijalankan oleh Pengguna selected yang dipilih di Database . yang dipilih untuk Rentang Waktu yang ditentukan .
Sekarang, saya dapat melihat semua Mengunci informasi terkait untuk Pernyataan SQL yang dipilih .
Jadi, jika Anda ingin menyelesaikan masalah penguncian, pemblokiran, dan kebuntuan, saya sarankan Anda memeriksa Spotlight Cloud. Spotlight Cloud membuatnya lebih mudah dari sebelumnya untuk menyelidiki dan memahami masalah penguncian dalam database dan pada akhirnya memastikan bahwa kode aplikasi Anda bebas dari kebuntuan.