All Products
Search
Document Center

ApsaraDB RDS:Atasi masalah penggunaan memori pada instans ApsaraDB RDS for MySQL

Last Updated:Aug 22, 2026

Topik ini menjelaskan cara memantau penggunaan memori serta memberikan penyebab dan solusi untuk masalah memori umum.

Informasi latar belakang

Penggunaan memori dan tingkat hit kolam buffer merupakan metrik utama untuk instans ApsaraDB RDS for MySQL. Penggunaan memori yang tinggi dapat menyebabkan kehabisan memori, sedangkan tingkat hit kolam buffer yang rendah menunjukkan bahwa banyak halaman data tidak ditemukan di kolam buffer dan harus dibaca dari disk, sehingga meningkatkan throughput I/O dan latensi.

Lihat penggunaan memori

Anda dapat melihat thread aktif di RDS Management Console dengan beberapa cara:

  • Monitoring and Alerts

    Di konsol, buka halaman Monitoring and Alerts. Pada tab Standard Monitoring, Anda dapat melihat MySQL CPU/Memory Usage dan InnoDB Buffer Pool Hit Rate instans tersebut.

    内存使用率缓存命中率

  • Database Autonomy Service (DAS)

    Di konsol, buka halaman Autonomy Service > Performance Trend. Klik tab Performance Trend untuk melihat MySQL CPU/Memory Usage dan InnoDB Buffer Pool Hit Rate.

    内存利用率缓存命中率

Anda juga dapat menggunakan performance_schema untuk mengaktifkan instrumen memori, sehingga memungkinkan Anda melihat statistik penggunaan memori di tabel ringkasan memori. Untuk informasi lebih lanjut, lihat dokumentasi resmi MySQL.

  • Untuk mengaktifkan pemantauan memori saat startup instans, ubah parameter performance_schema di konsol. Atur ke ON untuk RDS for MySQL 5.6, dan ke 1 untuk RDS for MySQL 5.7 dan 8.0. Untuk informasi lebih lanjut, lihat Lihat parameter instans. Restart instans agar perubahan diterapkan.

  • Untuk mengaktifkan pemantauan memori selama waktu proses instans, jalankan perintah berikut:

    update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory%';

Tabel-tabel berikut merangkum konsumsi memori dari berbagai dimensi:

  • memory_summary_by_account_by_event_name: Merangkum event berdasarkan akun (kombinasi user dan host) dan nama event.

  • memory_summary_by_host_by_event_name: Merangkum event berdasarkan host dan nama event.

  • memory_summary_by_thread_by_event_name: Merangkum event berdasarkan thread dan nama event.

  • memory_summary_by_user_by_event_name: Merangkum event berdasarkan user dan nama event.

  • memory_summary_global_by_event_name: Merangkum event berdasarkan nama event.

Penyebab umum penggunaan memori tinggi di RDS for MySQL

Kolam Buffer InnoDB biasanya mengonsumsi sebagian besar memori. Penggunaan memori maksimum kolam buffer dibatasi oleh parameter konfigurasinya. Namun, sejumlah besar memori juga dialokasikan dan disesuaikan secara dinamis selama eksekusi permintaan, termasuk untuk tabel temporary di memori, cache pra-ambil, cache tabel, indeks hash, dan objek kunci baris. Untuk informasi lebih lanjut tentang penggunaan memori dan batas parameter, lihat dokumentasi resmi MySQL.

Kueri multi-pernyataan

MySQL mendukung pengiriman beberapa pernyataan SQL sekaligus, dipisahkan oleh titik koma (;). MySQL memproses setiap pernyataan SQL secara berurutan, tetapi sebagian memori yang dialokasikan baru dilepas setelah semua pernyataan selesai dieksekusi.

Jika Anda mengirim banyak kueri multi-pernyataan sekaligus—misalnya hingga ratusan megabyte—akumulasi memori yang dikonsumsi oleh berbagai objek selama eksekusi bisa menjadi sangat besar dan berpotensi menyebabkan kehabisan memori pada proses MySQL.

Umumnya, batch besar kueri multi-pernyataan menyebabkan lonjakan tiba-tiba pada lalu lintas jaringan. Anda dapat mengidentifikasi pola ini melalui pemantauan lalu lintas jaringan dan SQL Explorer. Hindari penggunaan kueri multi-pernyataan dalam logika aplikasi Anda.

内存耗尽

Masalah kolam buffer

Semua halaman data untuk tabel disimpan di kolam buffer. Saat kueri dijalankan, jika halaman data yang diperlukan ditemukan di kolam buffer, tidak terjadi I/O fisik, sehingga eksekusi SQL menjadi efisien. Kolam buffer menggunakan algoritma Least Recently Used (LRU) untuk mengelola halaman data, dan semua halaman kotor ditempatkan di daftar flush.

Secara default, ukuran InnoDB Buffer Pool untuk RDS for MySQL diatur ke 75% dari memori instans, yang biasanya merupakan bagian terbesar dari memori yang dikonsumsi instans.

Masalah umum terkait kolam buffer:

  • Pra-pemanasan halaman data yang tidak mencukupi dapat menyebabkan latensi kueri tinggi. Masalah ini sering terjadi setelah restart instans, saat membaca data dingin, atau ketika tingkat hit kolam buffer rendah. Untuk mengatasinya, Anda dapat melakukan upgrade tipe instans atau melakukan pra-pemanasan data sebelum promosi penjualan.

  • Akumulasi halaman kotor yang berlebihan. Ketika jarak antara Log Sequence Number (LSN) tertua dari halaman kotor yang belum di-flush dan LSN saat ini melebihi 76%, thread pengguna dipicu untuk menyinkronkan dan membersihkan halaman kotor, yang secara signifikan menurunkan kinerja instans. Untuk mengoptimalkannya, seimbangkan beban tulis, hindari throughput tulis yang terlalu tinggi, sesuaikan parameter pembersihan halaman kotor, atau lakukan upgrade tipe instans.

  • Parameter innodb_buffer_pool_instances diatur terlalu rendah untuk instans berkapasitas memori tinggi. Di bawah beban Queries Per Second (QPS) tinggi, kontensi kunci di kolam buffer bisa menjadi sangat intens. Untuk instans berkapasitas memori tinggi, atur parameter innodb_buffer_pool_instances ke 8, 16, atau lebih tinggi.

Tabel temporary

Ukuran tabel temporary di memori dibatasi oleh parameter tmp_table_size dan max_heap_table_size. Jika tabel melebihi batas ini, tabel tersebut akan dikonversi menjadi tabel temporary di disk. Jika banyak koneksi membuat tabel temporary besar secara bersamaan, hal ini dapat menyebabkan lonjakan memori tiba-tiba. MySQL 8.0 memperkenalkan mesin temptable baru. Ukuran total semua tabel temporary di memori yang dialokasikan oleh semua thread tidak boleh melebihi nilai parameter temptable_max_ram. Nilai default untuk temptable_max_ram adalah 1 GB. Jika batas ini terlampaui, tabel akan dikonversi menjadi tabel temporary di disk.

Alasan lainnya

Jika sebuah instans memiliki banyak tabel atau QPS tinggi, cache tabel juga dapat mengonsumsi memori signifikan. Hindari membuat terlalu banyak tabel pada satu instans atau mengatur parameter table_open_cache terlalu tinggi.

Memori yang digunakan oleh indeks hash adaptif secara default sebesar 1/64 dari ukuran kolam buffer. Jika Anda melakukan kueri atau menulis field Binary Large Object (BLOB) yang sangat besar, memori dialokasikan secara dinamis untuk objek besar ini, sehingga meningkatkan penggunaan memori secara keseluruhan.

Banyak masalah lain juga dapat menyebabkan peningkatan penggunaan memori. Jika penggunaan memori meningkat secara abnormal atau instans kehabisan memori, lihat dokumentasi resmi MySQL untuk mengidentifikasi penyebabnya.