Persyaratan: Ada banyak alasan mengapa database SQL Server menyebabkan kebuntuan, dalam produksi, setiap orang mungkin mengalami masalah kebuntuan, dan penyebab spesifik mungkin tidak ditemukan berdasarkan informasi abnormal dari kebuntuan aplikasi saja, sehingga perlu menggunakan peristiwa ekstensi di SQL Server untuk melacak masalah kebuntuan dan mencatat detail spesifik kapan kebuntuan terjadi.
Ringkasan acara yang diperluas
Extended Events adalah fitur pemantauan performa ringan yang memungkinkan pengguna mengumpulkan data yang mereka butuhkan untuk memantau dan menyelesaikan masalah. Fitur ini memungkinkan Anda untuk melihat detail tentang operasi internal mesin data untuk pemantauan kinerja dan tujuan terkait pemecahan masalah.
Dengan arsitektur Extended Events (XEvents), pengguna dapat menggunakan data sebanyak atau sesedikit yang mereka butuhkan untuk memantau, mengidentifikasi, atau memecahkan masalah performa SQL Server, Azure SQL Database, dan Azure SQL Managed Instance. Acara yang diperpanjang sangat dapat dikonfigurasi, ringan, dan dapat diskalakan dengan baik.
Referensi:
Login hyperlink terlihat.
Login hyperlink terlihat.
Penyebab kebuntuan
Kebuntuan disebabkan oleh kunci konkurensi yang bersaing dalam database, biasanya dalam transaksi multi-langkah. Setiap sesi pengguna mungkin memiliki satu atau beberapa tugas yang berjalan atas namanya, di mana setiap tugas dapat mengambil atau menunggu untuk mengambil berbagai sumber daya. Jenis sumber daya berikut dapat menyebabkan pemblokiran dan akhirnya menyebabkan kebuntuan.
- Kunci: Kunci yang menunggu untuk mengambil sumber daya seperti objek, halaman, baris, metadata, dan aplikasi dapat menyebabkan kebuntuan. Misalnya, transaksi T1 memiliki kunci bersama (kunci S) pada baris r1 dan menunggu untuk mendapatkan kunci eksklusif (kunci X) untuk baris r2. Transaksi T2 memiliki kunci bersama (kunci S) pada baris r2 dan menunggu untuk mendapatkan kunci eksklusif (kunci X) untuk baris r1. Ini menghasilkan loop kunci di mana T1 dan T2 saling menunggu untuk melepaskan sumber daya yang terkunci.
- Utas pekerja: Antrean tugas untuk utas pekerja yang tersedia dapat menyebabkan kebuntuan. Jika tugas yang diantreki memiliki sumber daya yang memblokir semua utas pekerja, itu akan mengakibatkan kebuntuan. Misalnya, setelah sesi S1 memulai transaksi dan memperoleh kunci bersama (S-lock) untuk baris r1, sesi tersebut akan tidur. Sesi aktif yang berjalan pada semua utas pekerja yang tersedia mencoba mendapatkan kunci eksklusif (X-lock) untuk baris r1. Karena sesi S1 tidak dapat mendapatkan utas pekerja, sesi tidak dapat melakukan transaksi dan melepaskan kunci pada baris r1. Ini akan mengakibatkan kebuntuan.
- Memori: Kebuntuan dapat terjadi ketika permintaan bersamaan menunggu untuk mendapatkan memori dan memori yang tersedia saat ini tidak cukup untuk kebutuhannya. Misalnya, dua kueri bersamaan (Q1 dan Q2) dijalankan sebagai fungsi yang ditentukan pengguna, masing-masing memperoleh memori 10 MB dan 20 MB. Jika setiap kueri membutuhkan 30 MB dan total memori yang tersedia adalah 20 MB, Q1 dan Q2 harus menunggu satu sama lain untuk mengosongkan memori, yang akan mengakibatkan kebuntuan.
- Kueri paralel dan sumber daya terkait eksekusi: Koordinator pemrosesan, generator, atau utas konsumen yang biasanya terkait dengan port yang dialihkan dapat saling memblokir ketika berisi setidaknya satu proses yang bukan merupakan bagian dari kueri paralel, yang mengakibatkan kebuntuan. Selain itu, ketika kueri paralel memulai eksekusi, SQL Server menentukan tingkat paralelisme atau jumlah utas pekerja berdasarkan beban kerja saat ini. Kebuntuan dapat terjadi jika ada perubahan tak terduga dalam beban kerja sistem, misalnya, ketika kueri baru mulai berjalan di server atau ketika sistem kehabisan utas pekerja.
- Sumber daya Beberapa Kumpulan Hasil Aktivitas (MARS): Sumber daya ini digunakan untuk mengontrol eksekusi silang beberapa permintaan aktivitas di bawah MARS.
Referensi:
Login hyperlink terlihat.
Kebuntuan pencatatan peristiwa yang diperpanjang
Buat peristiwa ekstensi untuk merekam informasi kebuntuan dengan perintah berikut:
Memulai sesi peristiwa kebuntuan
Menghentikan sesi acara
Menghapus sesi acara
Data sesi peristiwa kueri
Kebuntuan pengujian
Buat tabel Tab1 baru untuk pengujian, dan buat dua jendela eksekusi baru, dan jalankan perintah berikut masing-masing:
Kebuntuan terjadi sebagai berikut:
Transaksi (ID proses 68) dengan proses lain menemui jalan buntu pada sumber daya yang terkunci dan telah dipilih sebagai korban kebuntuan. Silakan jalankan ulang transaksi. Transaksi (ID Proses 68) menemui jalan buntu pada sumber daya kunci dengan proses lain dan telah dipilih sebagai korban kebuntuan. Jalankan ulang transaksi.
Lihat data sesi acara seperti yang ditunjukkan pada gambar berikut:
Data XML terperinci adalah sebagai berikut:
(Akhir)
|