Pemblokiran SQL Server adalah ciri normal sistem database SQL Server. Pemblokiran terjadi ketika SQL Server melayani permintaan dari beberapa klien dan proses yang berbeda meminta sumber daya yang sama pada waktu yang sama. Jika sumber daya sedang digunakan, sumber daya dikunci dan tidak tersedia untuk permintaan berikutnya, sehingga prosesnya ditunda hingga sumber daya dilepaskan dan tersedia kembali. Blok SQL Server biasanya menyelesaikan sendiri tanpa efek nyata pada kinerja. Namun, terkadang, blok menyebabkan kinerja menurun baik karena proses awal mengunci sumber daya untuk waktu yang lama sebelum melepaskannya atau karena proses awal tidak melepaskan sumber daya sama sekali, yang membuat sumber daya tidak dapat diakses sampai blok tersebut diselesaikan secara manual.
Ketika satu set sumber daya diblokir untuk waktu yang signifikan, kualitas kinerja menurun ke titik di mana pengguna sistem mulai memperhatikan masalah. Masalah ini mencakup hal-hal seperti kueri yang membutuhkan waktu lama untuk dijalankan atau waktu habis atau pengguna tidak dapat menyimpan layar yang telah mereka modifikasi.
Cara Memperbaiki Blok SQL Server
Solusi jangka pendek untuk pemblokiran SQL Server adalah mengidentifikasi dan membuka blokir transaksi secara manual saat Anda melihat kinerja terkena dampak negatif oleh pemblokiran atau pemblokiran.
Setelah Anda mengkonfirmasi keberadaan blok SQL Server, periksa monitor aktivitas SQL Server dan matikan kueri yang paling banyak menyebabkan masalah. Anda juga dapat menggunakan skrip SQL untuk terus memantau status penguncian dan pemblokiran di SQL Server. Brent Ozar menyarankan untuk menambahkan beberapa penghitung kinerja khusus pemblokiran sehingga SQL Server akan memberi tahu Anda ketika Anda telah melampaui ambang pemblokiran yang ditentukan.
Cara Mencegah Blok SQL Server
Sangat berguna bagi administrator database untuk mengetahui cara memperbaiki blok SQL Server. Namun demi mempertahankan sistem berkinerja tinggi, lebih baik mengetahui cara mencegah—atau setidaknya meminimalkan—terjadinya pemblokiran. Berikut adalah empat tip untuk meminimalkan beberapa jenis pemblokiran SQL Server yang umum:
1. Gunakan indeks
Menggunakan indeks berkerumun dalam tabel penggunaan tinggi membantu mengurangi pemblokiran dengan meminta pengoptimal kueri untuk menjalankan pencarian indeks alih-alih pemindaian indeks. Jika hanya record yang sedang diperbarui yang dikunci, proses selanjutnya dapat menghindari penguncian dan dapat diselesaikan.
Penting juga untuk memastikan bahwa pernyataan UPDATE dan DELETE menggunakan indeks. Indeks membantu pernyataan UPDATE dan DELETE mengurangi jumlah kunci modifikasi yang mereka peroleh baik menggunakan indeks nonclustered atau petunjuk indeks untuk menghapus kunci.
2. Bersihkan kueri Anda
Salah satu praktik terbaik untuk menghindari blok SQL Server adalah memecah transaksi panjang menjadi beberapa transaksi yang lebih pendek. Kueri yang berjalan lama menahan kunci selama transaksi, membuat sumber daya tidak tersedia untuk proses lain. Memecah transaksi panjang menjadi transaksi pendek membuat data terus bergerak.
Pertimbangkan untuk menggunakan penyetelan SQL Server untuk membuat kueri seefisien mungkin. Pengoptimal kueri yang baik akan menulis dan menulis ulang kueri hingga kueri dikonfigurasi untuk mengurangi jumlah blok yang dapat memperlambat kinerja.
3. Identifikasi akar penyebab pemblokiran SQL Server
Melacak metrik kinerja dari waktu ke waktu adalah cara yang bagus untuk menghindari pemblokiran SQL Server. Dengan menemukan sesi mana yang sering diblokir dan pernyataan apa yang terlibat, Anda dapat menentukan tindakan untuk menghilangkan akar penyebab pemblokiran berulang melalui pengindeksan, pengoptimalan kueri, atau cara lain.
Tempat lain untuk mencari akar penyebab pemblokiran adalah beban kerja sistem. Jalankan analisis beban kerja untuk menentukan apakah telah terjadi peningkatan. Beban kerja yang terlalu berat akan menyebabkan pemblokiran SQL Server karena semakin banyak kueri yang menumpuk menunggu akses ke sumber daya yang terkunci. Anda mungkin perlu menambahkan indeks atau mendistribusikan beban kerja ke beberapa database untuk menyelesaikan masalah kinerja beban kerja yang berat.
4. Tetap perbarui statistik Anda
Statistik yang kedaluwarsa dapat memicu rencana kueri yang tidak efisien untuk dijalankan karena rencana tersebut tidak diperbarui untuk memperhitungkan perubahan. SQL Server akan meluncurkan perayapan pencarian untuk mencari data yang dipindahkan atau hilang, yang pada gilirannya akan membuat blok.
Cara paling efektif untuk menjaga statistik tetap terkini adalah dengan mengotomatiskan pembaruan sebanyak mungkin. Jika Anda tidak dapat menjadwalkan pembaruan otomatis, pastikan untuk menambahkan pembaruan manual ke daftar periksa pemeliharaan terjadwal untuk memastikan pembaruan dilakukan secara rutin.
Pemblokiran SQL Server mungkin merupakan fakta kehidupan DBA, tetapi ada beberapa cara untuk mengurangi dampaknya pada kinerja database SQL Server Anda. Putuskan siklus buka blokir dengan menerapkan beberapa strategi yang dibahas di atas. Dengan sedikit perencanaan, pengoptimalan, dan otomatisasi, kemungkinan untuk mengurangi terjadinya pemblokiran SQL Server—dan, dalam beberapa keadaan, menghapusnya sama sekali.