Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 2617|Jawab: 2

[Kiat] SQL Server menggunakan peristiwa yang diperluas untuk melacak masalah kebuntuan

[Salin tautan]
Diposting pada 02/03/2024 19.13.04 | | | |
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)





Mantan:Pengoptimalan performa .NET/C# menggunakan kueri paralel PLINQ
Depan:Eksekusi kode di Visual Studio menggunakan jendela Interaktif C#
 Tuan tanah| Diposting pada 02/03/2024 19.14.35 |
Perluas jalur default file peristiwa:

C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\deadlock_monitor_0_133538477770860000.xel
 Tuan tanah| Diposting pada 02/03/2024 19.16.54 |
Membuat tabel tab1 baru untuk menguji skrip SQL

Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com