Pada instans ApsaraDB RDS for MySQL yang sehat, jumlah thread aktif biasanya di bawah 10—atau hingga 20–30 pada instans ber-spesifikasi tinggi dengan QPS tinggi. Ketika jumlah tersebut melebihi 100 atau 1.000, kueri SQL menumpuk, waktu respons memburuk, dan dalam kasus parah, instans berhenti memproses kueri sama sekali.
Topik ini mencakup empat penyebab utama paling umum beserta cara mengatasinya.
Periksa jumlah thread aktif
Masuk ke ApsaraDB RDS console dan gunakan salah satu metode berikut:
-
Monitoring and Alerts: Di panel navigasi kiri, klik Monitoring and Alerts. Pada tab Standard Monitoring, klik Standard View.
-
DAS: Di panel navigasi kiri, pilih Autonomy Service > Dashboard. Pada tab Performance Trends, jumlah thread yang tinggi menunjukkan bahwa beberapa sesi terblokir.
Kueri SQL lambat
Gejala: Jalankan SHOW PROCESSLIST. Jika banyak sesi melakukan pemindaian terhadap jumlah baris yang sangat besar, kueri lambat menjadi penyebab meningkatnya jumlah thread aktif. Untuk melihat log detail, buka Autonomy Service > Slow Query Logs.
Solusi: Aktifkan SQL throttling atau hentikan sesi yang bermasalah untuk menghentikan penumpukan. Untuk detail selengkapnya, lihat SQL throttling.
Table cache exhaustion
Gejala: Sesi berpindah ke status Opening table ketika ukuran table cache terlalu kecil untuk menangani queries per second (QPS) saat ini atau jumlah total tabel yang dibuka.
Solusi: Tingkatkan nilai table_open_cache dan table_open_cache_instances.
Mengubah nilaitable_open_cachelangsung berlaku tanpa perlu restart instans. Mengubahtable_open_cache_instancesmemerlukan restart.
Metadata lock contention
Gejala: Sesi menampilkan status Waiting for table metadata lock. Pada fase Prepare dan Commit, pernyataan DDL harus mendapatkan metadata lock pada tabel. Jika suatu tabel terlibat dalam transaksi yang belum dikomit atau kueri lambat, pernyataan DDL tersebut akan terblokir—yang kemudian memblokir semua kueri berikutnya pada tabel tersebut.
Solusi: Hentikan semua transaksi yang belum dikomit, kueri lambat, dan pernyataan DDL yang sedang berjalan pada tabel yang terdampak.
Row lock conflicts
Gejala: Nilai tinggi untuk Innodb_row_lock_waits dan Innodb_row_lock_time menunjukkan adanya kontensi kunci baris. Untuk melihat metrik ini, buka Autonomy Service > Dashboard, klik tab Performance Trends, lalu periksa bagian Row Lock.
Diagnosis: Jalankan SHOW ENGINE INNODB STATUS; dan cari sesi dalam status Lock wait. Jumlah besar sesi semacam ini mengonfirmasi adanya konflik kunci baris yang parah.
Solusi: Terapkan langkah-langkah berikut untuk mengurangi konflik:
-
Optimalkan pembaruan data hot: Sebarkan beban tulis ke berbagai baris alih-alih memusatkan pembaruan pada baris yang sama.
-
Kurangi ukuran transaksi: Pecah transaksi besar menjadi transaksi yang lebih kecil agar kunci hanya dipegang dalam periode yang lebih singkat.
-
Komit segera: Komit transaksi secepat mungkin untuk melepaskan kunci baris dan membuka blokir sesi yang menunggu.