Kueri SQL lambat pada instans ApsaraDB RDS for MySQL umumnya disebabkan oleh salah satu dari beberapa akar masalah berikut: masalah skema atau indeks, kehabisan resource, efek samping peningkatan versi, parameter yang dikonfigurasi salah, cache stampede, operasi batch berat, transaksi yang tidak ditutup, atau tugas terjadwal. Setiap penyebab memiliki gejala khas dan solusi yang sesuai.
Cara melakukan troubleshooting
Mulailah dengan pemantauan sebelum menyelidiki penyebab spesifik apa pun. Ikuti urutan berikut:
Sebelum menyelidiki penyebab tertentu, pastikan terlebih dahulu tidak ada bottleneck resource. Buka Monitoring and Alerts di Konsol ApsaraDB RDS dan periksa tab Standard Monitoring. Klik Resource Monitoring untuk meninjau penggunaan CPU, penggunaan memori, penggunaan disk, IOPS (input/output operations per second), koneksi, rasio hit cache, queries per second (QPS), dan transactions per second (TPS). Jika salah satu metrik ini secara konsisten tinggi, perlambatan kemungkinan besar disebabkan oleh bottleneck resource, bukan oleh masalah pada pernyataan SQL tertentu. Untuk detail selengkapnya, lihat batas instans.
Jika suatu metrik mendekati 100%, mulailah dengan batas instans atau operasi batch.
Jika metrik tampak normal tetapi kueri tetap lambat, periksa transaksi yang tidak ditutup dan eksepsi SQL.
Buka SQL Explorer and Audit untuk mengidentifikasi pernyataan SQL lambat tertentu. Dua metrik berikut membantu memprioritaskan pernyataan mana yang harus ditangani terlebih dahulu:
Waktu eksekusi: Kueri yang berjalan lama memegang lock lebih lama dan menghambat operasi lain. Perbaiki kueri ini terlebih dahulu.
Jumlah eksekusi: Kueri yang dieksekusi secara sering menciptakan beban kumulatif tinggi meskipun setiap eksekusi individual berjalan cepat. Kueri seperti ini merupakan kandidat kuat untuk optimalisasi.
Atasi kueri SQL lambat yang disebabkan oleh batas instans
Penyebab
Instans mencapai batas performanya karena beberapa alasan:
Workload meningkat tanpa peningkatan kapasitas penyimpanan atau resource komputasi yang sesuai.
Host fisik menua, sehingga performa instans secara keseluruhan menurun.
Volume data meningkat dan perubahan struktur data memperlambat kueri SQL tertentu seiring waktu.
Cara mengidentifikasi
Di Konsol ApsaraDB RDS, buka Monitoring and Alerts di panel navigasi. Pada tab Standard Monitoring, klik Resource Monitoring dan periksa apakah semua metrik penggunaan resource mendekati 100%. Jika ya, instans telah mencapai batas performanya.
Resolusi
Gunakan SysBench untuk mengukur performa maksimum instans Anda. Nilai QPS dan TPS yang diukur oleh SysBench merepresentasikan batas atas, bahkan dalam workload kueri kompleks. Untuk prosedur benchmark, lihat Panduan pengujian.
Jika instans telah mencapai batas performanya, lakukan upgrade ke spesifikasi yang lebih tinggi. Untuk detail selengkapnya, lihat Ubah spesifikasi instans.
Atasi kueri SQL lambat yang disebabkan oleh eksepsi SQL
Penyebab
Eksepsi SQL terjadi ketika kueri secara inheren tidak efisien karena masalah desain skema, indeks yang tidak tersedia, atau jumlah baris yang perlu dipindai terlalu besar.
Cara mengidentifikasi
Di Konsol ApsaraDB RDS, buka SQL Explorer and Audit di panel navigasi. Tinjau waktu eksekusi dan jumlah eksekusi untuk setiap kueri SQL lambat guna menentukan kueri mana yang perlu diperhatikan.
Resolusi
Optimalkan pernyataan SQL bermasalah berdasarkan kebutuhan bisnis Anda. Untuk detail selengkapnya, lihat Optimalisasi SQL.
Atasi kueri SQL lambat yang disebabkan oleh peningkatan versi
Penyebab
Peningkatan instans RDS dapat mengubah rencana kueri untuk pernyataan SQL yang sudah ada. Rencana kueri MySQL menggunakan jenis join yang berbeda-beda efisiensinya. Berikut urutan efisiensi dari yang paling efisien hingga paling tidak efisien: system, const, eq_ref, ref, fulltext, ref_or_null, index_merge, unique_subquery, index_subquery, range, index, dan all. Untuk detail selengkapnya, lihat dokumentasi resmi MySQL.
Ketika rencana kueri untuk pernyataan yang sering dieksekusi bergeser ke jenis join yang kurang efisien (seperti range atau index), pernyataan tersebut berjalan lebih lambat. Jika banyak pernyataan semacam itu dieksekusi secara paralel sekaligus, thread menumpuk lebih cepat daripada dilepaskan, sehingga kolam koneksi habis dan memengaruhi seluruh workload pada instans.
Cara mengidentifikasi
Di Konsol ApsaraDB RDS, buka Monitoring and Alerts di panel navigasi. Pada tab Standard Monitoring, klik Resource Monitoring dan periksa jumlah koneksi aktif. Lonjakan mendadak jumlah koneksi setelah peningkatan versi merupakan indikator kuat.
Resolusi
Gunakan EXPLAIN untuk menganalisis rencana kueri dari pernyataan yang lambat. Identifikasi jenis join, penggunaan indeks, dan jumlah baris yang dipindai untuk setiap pernyataan. Berdasarkan analisis ini, susun ulang pernyataan SQL atau sesuaikan indeks untuk mengembalikan efisiensi kueri. Untuk detail selengkapnya, lihat Optimalisasi SQL.
Atasi kueri SQL lambat yang disebabkan oleh pengaturan parameter yang tidak sesuai
Penyebab
Nilai yang salah untuk parameter innodb_buffer_pool_instances dan join_buffer_size dapat menurunkan performa eksekusi SQL.
Cara mengidentifikasi
Di Konsol ApsaraDB RDS, buka Parameters di panel navigasi. Pada tab Edit History, tinjau riwayat rekonfigurasi parameter tersebut untuk melihat apakah perubahan baru-baru ini bertepatan dengan penurunan performa.
Resolusi
Konfigurasi ulang innodb_buffer_pool_instances dan join_buffer_size ke nilai yang sesuai dengan workload dan spesifikasi instans Anda.
Atasi kueri SQL lambat yang disebabkan oleh kedaluwarsa entri cache
Penyebab
Ketika entri cache kedaluwarsa secara bersamaan (cache stampede), volume besar permintaan melewati cache dan langsung mengenai database. ApsaraDB RDS tidak menjamin rasio hit cache 100%, sehingga skenario ini mungkin terjadi dalam kondisi konkurensi tinggi.
Cara mengidentifikasi
Di Konsol ApsaraDB RDS, buka Monitoring and Alerts di panel navigasi. Pada tab Standard Monitoring, klik Resource Monitoring dan periksa rasio hit cache bersamaan dengan QPS dan TPS. Penurunan mendadak rasio hit cache yang diikuti lonjakan QPS mengindikasikan terjadinya cache stampede.
Resolusi
Aktifkan fitur-fitur berikut untuk menangani beban tambahan dan mengurangi dampak cache miss:
Thread Pool: Mengelola konkurensi koneksi dan mencegah kehabisan thread. Lihat Thread Pool.
Fast query cache: Menyimpan hasil kueri untuk mengurangi komputasi berulang. Lihat Fast query cache.
Automatic SQL throttling: Membatasi laju permintaan SQL masuk untuk melindungi instans. Lihat Automatic SQL throttling.
Atasi kueri SQL lambat yang disebabkan oleh operasi batch
Penyebab
Impor data, penghapusan, atau kueri skala besar yang berjalan bersamaan dengan workload normal bersaing untuk I/O disk dan resource transaksi, sehingga memperlambat seluruh eksekusi SQL.
Cara mengidentifikasi
Periksa penggunaan disk, log SQL, atau statistik kueri lambat. Salah satu indikator berguna: file binary log (binlog) biasanya berukuran 500 MB. Jika ukuran file binlog melebihi 500 MB, selidiki apakah operasi batch menjadi penyebabnya.
Di Konsol ApsaraDB RDS, buka Monitoring and Alerts di panel navigasi. Pada tab Standard Monitoring, klik Resource Monitoring untuk meninjau penggunaan disk dan IOPS. Klik Engine Monitoring untuk meninjau TPS.

Resolusi
Jadwalkan operasi batch pada jam sepi. Jika penjadwalan pada jam sepi tidak memungkinkan, pecah setiap operasi batch menjadi permintaan yang lebih kecil dan kirimkan secara berurutan untuk mengurangi beban puncak.
Atasi kueri SQL lambat yang disebabkan oleh transaksi yang tidak ditutup
Penyebab
Transaksi yang tidak ditutup memegang lock dan menghambat kueri lain. Kueri yang terkena dampak mengantre, muncul sebagai kueri SQL lambat, dan menyebabkan jumlah sesi aktif meningkat.
Cara mengidentifikasi
Jika workload tiba-tiba melambat tetapi penggunaan CPU dan IOPS tetap normal, serta jumlah sesi aktif terus meningkat, kemungkinan besar penyebabnya adalah transaksi yang tidak ditutup. Hal ini sering terjadi ketika pernyataan SQL dijalankan secara manual melalui Data Management Service (DMS) atau di luar alur aplikasi normal.
Resolusi
Identifikasi transaksi yang memegang lock. Periksa konflik lock antar transaksi, lalu hentikan pernyataan SQL yang menghambat untuk melepaskan lock tersebut.
Atasi kueri SQL lambat yang disebabkan oleh tugas terjadwal
Penyebab
Tugas terjadwal yang melakukan penulisan atau pembaruan batch berjalan pada interval tetap. Meskipun dikonfigurasi untuk jam sepi, tugas tersebut dapat bersaing dengan workload lain karena tekanan locking dan I/O, sehingga menyebabkan kueri SQL lambat selama periode tumpang tindih.
Cara mengidentifikasi
Jika beban instans melonjak secara berkala dan dapat diprediksi, kemungkinan besar tugas terjadwal terlibat. Tinjau informasi pemantauan pada tab Standard Monitoring di halaman Monitoring and Alerts untuk mengorelasikan pola beban dengan jadwal tugas.
Resolusi
Sesuaikan jadwal agar tugas berjalan pada periode dengan trafik paling rendah. Atur beberapa tugas terjadwal agar tidak tumpang tindih pada beban puncaknya.
Atasi kueri SQL lambat yang disebabkan oleh masalah jaringan
Jika metrik resource dan analisis pernyataan SQL keduanya tampak normal tetapi workload tetap lambat, periksa metode koneksi jaringan. Di halaman detail instans, buka Database Connection untuk melihat jenis endpoint. Endpoint publik memiliki latensi lebih tinggi dibandingkan endpoint pribadi (VPC). Jika aplikasi Anda berjalan pada Instance ECS dalam VPC yang sama dengan instans RDS Anda, gunakan endpoint pribadi untuk koneksi, yang akan mengurangi latensi jaringan. Untuk detail selengkapnya, lihat Troubleshoot connection failures to an instance.
Langkah selanjutnya
Gunakan alat dan topik berikut untuk menyelidiki kueri SQL lambat lebih lanjut: