Fitur diagnosis cepat yang disediakan oleh PolarDB for MySQL terintegrasi dengan beberapa fitur dari Database Autonomy Service (DAS) dan memungkinkan Anda menggunakan fitur analisis deadlock untuk menganalisis deadlock terbaru pada database serta memeriksa detail analisisnya.
Ikhtisar
Fitur analisis deadlock memungkinkan Anda melakukan analisis multi-dimensi pada deadlock, pemblokiran transaksi, dan kunci metadata di kluster.
Untuk mengaktifkan fitur analisis deadlock lengkap dan analisis deadlock lainnya, pastikan persyaratan berikut terpenuhi:
Kluster adalah kluster PolarDB for MySQL.
DAS Edisi Hemat Biaya atau DAS Edisi Perusahaan telah diaktifkan. Kedua edisi ini hanya tersedia di beberapa wilayah. Untuk informasi lebih lanjut, lihat Basis data dan wilayah yang didukung. Untuk panduan mengaktifkan DAS Edisi Hemat Biaya atau DAS Edisi Perusahaan, lihat Aktifkan dan kelola DAS Edisi Hemat Biaya dan DAS Edisi Perusahaan.
Analisis deadlock terbaru: DAS menganalisis log deadlock terbaru dari hasil pernyataan
SHOW ENGINE INNODB STATUS. Jika terjadi beberapa deadlock, DAS hanya menganalisis deadlock terbaru.Analisis deadlock lengkap: DAS secara berkala menganalisis log kesalahan, mengurai informasi deadlock, dan melakukan analisis komprehensif. Fitur ini juga memungkinkan Anda melihat tren deadlock dalam rentang waktu tertentu dan memeriksa detail setiap deadlock.
Analisis kunci lainnya: DAS menganalisis kunci metadata dan pemblokiran transaksi dalam sesi saat ini dari kluster Anda secara real-time berdasarkan data di
information_schemadanperformance_schema.Analisis kunci metadata: DAS menyimpulkan hubungan tunggu kunci dan menghasilkan diagram yang sesuai berdasarkan data di tabel seperti
information_schema.processlist.Analisis pemblokiran transaksi: DAS menganalisis hubungan pemblokiran transaksi dan menghasilkan diagram berdasarkan data dari tabel
information_schema.processlist,information_schema.innodb_trx,information_schema.innodb_lock_waits, atauperformance_schema.data_lock_waits. Data dari tabel information_schema.innodb_lock_waits digunakan untuk kluster yang menjalankan MySQL 5.6 atau MySQL 5.7, sedangkan data dari tabel performance_schema.data_lock_waits digunakan untuk kluster yang menjalankan MySQL 8.0.CatatanFitur analisis pemblokiran transaksi tidak didukung untuk kluster PolarDB for MySQL yang menjalankan MySQL 5.6.
Pengaturan parameter
Untuk menggunakan fitur analisis deadlock pada kluster, Anda harus mengonfigurasi parameter yang sesuai. Tabel berikut menjelaskan pengaturan parameter yang diperlukan untuk fitur analisis deadlock yang berbeda.
Fitur analisis deadlock | Pengaturan parameter yang diperlukan |
Analisis deadlock terbaru | Atur parameter |
Analisis deadlock lengkap |
|
Analisis pemblokiran transaksi dalam analisis kunci lainnya | Atur parameter |
Untuk informasi tentang cara memodifikasi parameter kluster PolarDB for MySQL, lihat Konfigurasikan parameter kluster dan node.
Prosedur
Masuk ke Konsol PolarDB. Di panel navigasi sebelah kiri, klik Clusters. Di pojok kiri atas, pilih wilayah kluster. Di daftar kluster, klik ID kluster untuk masuk ke halaman Informasi Dasar.
Di panel navigasi sebelah kiri, pilih .
Klik tab Deadlock Analysis.
Di halaman Deadlock Analysis, pilih ID kluster target dari daftar drop-down Current Node dan klik Diagnose.
Klik View Details di kolom Details untuk deadlock terbaru yang terdeteksi.
CatatanTombol View Details hanya tersedia ketika kolom Deadlock Detected untuk item yang sama muncul dalam status Yes.
Di kotak dialog Deadlock Analysis, lihat detail hasil analisis deadlock. Anda dapat mengklik View Deadlock Log untuk melihat detail log deadlock terbaru.
FAQ
Mengapa mengeksekusi pernyataan UPDATE menyebabkan deadlock? Bagaimana cara mengatasinya?
Deadlock terjadi ketika dua transaksi memegang kunci eksklusif (X lock) pada rekaman yang sesuai dan mencoba mendapatkan kunci yang dipegang oleh yang lain secara bersamaan. Sebagai contoh:
Transaksi 1 mengeksekusi pernyataan
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;, yang memperoleh kunci eksklusif pada akun pengguna A (id=1).Transaksi 2 mengeksekusi pernyataan
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;, yang memperoleh kunci eksklusif pada akun pengguna B (id=2).
Dalam skenario ini, setiap transaksi memegang kunci eksklusif pada rekaman yang berbeda. Jika transaksi 1 mencoba memperoleh kunci eksklusif pada rekaman dengan user_id=2 dan transaksi 2 mencoba memperoleh kunci eksklusif pada rekaman dengan user_id=1, deadlock terjadi karena kunci dipegang oleh transaksi lain.
Solusi: Pastikan semua transaksi memperbarui rekaman dalam urutan yang sama, seperti selalu memperbarui rekaman dengan ID yang lebih kecil terlebih dahulu. Alternatifnya, Anda dapat menggabungkan beberapa operasi pembaruan menjadi satu pembaruan batch untuk mengurangi kontes kunci.