全部产品
Search
文档中心

ApsaraDB RDS:Bagaimana cara memeriksa alokasi kapasitas memori instance ApsaraDB RDS for MySQL saya?

更新时间:Jun 25, 2025

Kapasitas memori merupakan metrik penting untuk mengukur kinerja instance ApsaraDB RDS for MySQL. Jika permintaan SQL abnormal terdeteksi pada instance RDS dan beberapa database perlu dioptimalkan, penggunaan memori instance RDS akan meningkat. Dalam kasus ekstrem, pergantian utama/sekunder dapat dipicu akibat kesalahan kehabisan memori (OOM). Memori sebuah instance RDS terdiri dari memori bersama dan memori pribadi spesifik sesi. Topik ini menjelaskan kedua jenis memori tersebut.

Memori bersama

Jalankan pernyataan berikut untuk menanyakan alokasi memori bersama dari instance RDS:

show variables where variable_name in (
'innodb_buffer_pool_size','innodb_log_buffer_size','innodb_additional_mem_pool_size','key_buffer_size','query_cache_size'
);
        

Kode berikut memberikan contoh alokasi memori bersama dari instance RDS dengan kapasitas memori sebesar 240 MB:

+---------------------------------+-----------------+
| Variable_name                   | Value           |
+---------------------------------+-----------------+
| innodb_additional_mem_pool_size | 2097152         |
| innodb_buffer_pool_size         | 67108864        |
| innodb_log_buffer_size          | 1048576         |
| key_buffer_size                 | 16777216        |
| query_cache_size                | 0               |
+---------------------------------+-----------------+
Sebanyak lima catatan data dikembalikan dalam waktu 342,74 milidetik.
        

Parameter:

  • innodb_buffer_pool

    Pool buffer InnoDB adalah area di mana InnoDB menyimpan data. Pool buffer InnoDB menggunakan sumber daya memori secara efisien dan mempercepat operasi pembacaan serta modifikasi data, sehingga meningkatkan kinerja instance RDS secara keseluruhan. Pool buffer InnoDB menyimpan informasi tentang halaman data, halaman indeks, halaman undo, buffer insert, indeks hash adaptif, kunci, dan kamus data. Saat Anda menjalankan pernyataan SQL untuk membaca atau menulis data, operasi dilakukan pada pool buffer InnoDB, bukan pada file data fisik. Data yang dihasilkan kemudian ditulis ke file data fisik melalui mekanisme seperti titik pemeriksaan. Pool buffer InnoDB membantu meningkatkan kinerja instance RDS dan mempercepat pelaksanaan pernyataan SQL. Namun, jika pool buffer InnoDB digunakan, waktu pemulihan instance RDS dari titik kegagalan akan lebih lama.

  • innodb_log_buffer

    Buffer log InnoDB digunakan untuk menyimpan redo logs. Mesin penyimpanan InnoDB menulis redo logs ke buffer log InnoDB dan membersihkannya ke file redo log dengan frekuensi tertentu. Ukuran buffer log InnoDB disetel menjadi 1 MB untuk setiap instance RDS. Anda tidak perlu menyetel ukuran buffer log InnoDB menjadi nilai besar karena, dalam banyak kasus, data spesifik yang disimpan dalam buffer log InnoDB dibersihkan ke file redo log dengan frekuensi tinggi. Thread utama dibersihkan setiap detik, transaksi dibersihkan saat komitmen, dan data yang tersimpan dibersihkan jika ukuran buffer log InnoDB yang tersedia kurang dari setengah dari total ukuran.

  • innodb_additional_mem_pool

    Pool buffer memori tambahan digunakan untuk menyimpan struktur data InnoDB tertentu. Anda perlu menyetel parameter ini menjadi 2 MB untuk instance RDS Anda. Dalam banyak kasus, Anda mengajukan permohonan 2 MB memori untuk menyimpan struktur data InnoDB dan meminta memori tambahan untuk menyimpan informasi tentang struktur data tersebut. Ukuran pool buffer memori tambahan bervariasi berdasarkan jumlah tabel. Jika sejumlah besar tabel dibuat untuk instance RDS Anda, Anda perlu menyetel parameter ini menjadi nilai yang lebih besar.

  • key_buffer

    Area penting yang digunakan untuk menyimpan cache tabel MyISAM. Anda perlu menyetel parameter ini menjadi 16 MB untuk semua instance RDS. Buffer ini menyimpan kunci tabel MyISAM. Tabel MyISAM berbeda dari tabel InnoDB; cache indeks tabel MyISAM disimpan di key_buffer, sedangkan cache datanya disimpan di memori sistem operasi. Jika instance RDS menggunakan mesin MyISAM, sejumlah memori tertentu harus dicadangkan untuk tabel MyISAM.

  • query_cache

    Cache query digunakan untuk menyimpan hasil query guna mengurangi overhead dari penguraian dan eksekusi pernyataan SQL. Parameter ini dinonaktifkan untuk instance RDS karena cocok untuk skenario di mana sejumlah besar permintaan baca tetapi sedikit permintaan tulis perlu diproses. Cache query menyimpan hasil query berdasarkan nilai hash dari pernyataan SQL. Jika Anda memodifikasi tabel pada instance RDS Anda, semua hasil query yang tersimpan dari tabel tersebut menjadi tidak valid.

Memori pribadi spesifik sesi

Memori bersama dialokasikan saat instance RDS Anda dibuat dan dibagikan oleh semua koneksi ke instance RDS. Jika kesalahan OOM terjadi pada instance RDS Anda, kesalahan tersebut disebabkan oleh memori pribadi dari setiap koneksi.

Jalankan pernyataan berikut untuk menanyakan alokasi memori pribadi spesifik sesi:

show variables where variable_name in (
'read_buffer_size','read_rnd_buffer_size','sort_buffer_size','join_buffer_size','binlog_cache_size','tmp_table_size'
);
            

Informasi berikut menggambarkan hasil query untuk instance RDS uji:

+-------------------------+-----------------+
| Variable_name           | Value           |
+-------------------------+-----------------+
| binlog_cache_size       | 262144          |
| join_buffer_size        | 262144          |
| read_buffer_size        | 262144          |
| read_rnd_buffer_size    | 262144          |
| sort_buffer_size        | 262144          |
| tmp_table_size          | 262144          |
+-------------------------+-----------------+
Sebanyak enam catatan data dikembalikan dalam waktu 356,54 milidetik.
            

Parameter:

  • read_buffer&read_rnd_buffer

    Buffer digunakan untuk menyimpan cache pemindaian berurutan dan acak secara terpisah. Anda perlu menyetel parameter ini menjadi 256 KB untuk instance RDS Anda. Saat sebuah thread memindai data secara berurutan atau acak, buffer diprioritaskan untuk mengurangi pembacaan fisik.

  • sort_buffer

    Memori digunakan untuk menyimpan hasil pengurutan antara, yang dialokasikan saat klausa ORDER BY dan GROUP BY digunakan untuk mengurutkan data. Anda perlu menyetel parameter ini menjadi 256 KB untuk instance RDS Anda. Selama proses pengurutan, jika jumlah data yang disimpan lebih besar dari nilai parameter sort_buffer_size, tabel sementara dihasilkan di disk untuk menyelesaikan pengurutan. Di sistem operasi Linux, jika nilai parameter ini lebih besar dari 2 MB, memori dialokasikan menggunakan mmap() alih-alih malloc(), yang mengurangi efisiensi.

  • join_buffer

    Memori digunakan selama operasi join. ApsaraDB RDS for MySQL hanya mendukung algoritma nested loop join. Saat Anda melakukan operasi join antara baris di tabel penggerak dan tabel non-penggerak, Anda dapat menyimpan tabel non-penggerak di buffer join. Dalam hal ini, Anda tidak perlu mengakses pool buffer yang memiliki mekanisme perlindungan konkurensi. Setel parameter ini menjadi 256 KB untuk instance RDS Anda.

  • binlog_cache

    Cache log biner digunakan untuk menyimpan log biner dari thread. Anda perlu menyetel parameter ini menjadi 256 KB untuk instance RDS Anda. Sebelum transaksi dikomit, sistem menyimpan log transaksi ke cache log biner. Setelah transaksi dikomit, sistem membersihkan log kembali ke file log biner di disk untuk menyimpan log secara permanen.

  • tmp_table

    Ukuran tabel sementara memori. Anda dapat memodifikasi parameter ini di konsol. Namun, parameter sebelumnya tidak dapat dimodifikasi di konsol. Jika ukuran tabel sementara memori yang dibuat menggunakan thread yang diperlukan melebihi nilai parameter ini, tabel sementara diubah menjadi tabel sementara MyISAM di disk. Jika kesalahan serupa dengan informasi berikut terjadi saat Anda menjalankan transaksi, Anda dapat meningkatkan nilai parameter tmp_table.

    [Err] 1114 - Tabel '/home/mysql/data3081/tmp/#sql_6197_2' penuh