View a markdown version of this page

Memecahkan masalah kehabisan memori untuk database Aurora MySQL - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memecahkan masalah kehabisan memori untuk database Aurora MySQL

Ketika instance Aurora MySQL DB berjalan sangat rendah pada memori, sistem operasi dapat menghentikan proses database, menyebabkan restart yang tidak direncanakan. Untuk membantu mencegah restart ini, Aurora MySQL menyertakan kemampuan manajemen memori yang memantau memori sistem dan mengambil tindakan pemulihan otomatis saat memori rendah. Tindakan ini membantu mencegah ketidaktersediaan database karena kehabisan memori.

Parameter berikut mengontrol perilaku ini:

  • aurora_enable_memory_management- Hanya tersedia di Aurora MySQL 8.4.

    • Ketika ON (default), Aurora secara otomatis mengelola tindakan pemulihan memori dan aurora_oom_response parameter diabaikan.

    • Setel OFF ke untuk mengontrol tindakan pemulihan secara manual melaluiaurora_oom_response.

  • aurora_oom_response— Daftar tindakan pemulihan yang dipisahkan koma. String kosong menonaktifkan semua tindakan. Tersedia dalam Aurora MySQL versi 3. Juga tersedia di Aurora MySQL 8.4 tetapi hanya dipertimbangkan ketika aurora_enable_memory_management disetel keOFF.

Tindakan respons OOM

Tindakan berikut dapat dimasukkan dalamaurora_oom_response, terdaftar dari paling tidak hingga paling agresif.

Tindakan Apa yang dilakukannya Catatan
print Mencatat kueri dan koneksi intensif memori ke log kesalahan. Tidak ada kueri atau koneksi yang dihentikan. Tersedia dalam Aurora MySQL versi 3 dan 8.4.
tune Mengecilkan cache tabel internal (table_open_cache,table_definition_cache) untuk membebaskan memori. Ukuran cache dipulihkan ketika memori kembali normal. Entri cache sebelumnya tidak dipulihkan; entri baru hanya ditambahkan saat kueri berikutnya mengaksesnya. Tersedia dalam Aurora MySQL versi 3 dan 8.4. Hanya instans yang disediakan — tidak didukung pada Serverless v2.
tune_buffer_pool Mengecilkan kumpulan buffer InnoDB untuk membebaskan memori. Ukuran kumpulan buffer dipulihkan ketika memori kembali normal. Halaman yang sebelumnya di-cache yang diusir tidak dimuat ulang secara otomatis; halaman baru di-cache hanya saat kueri berikutnya mengaksesnya. Aurora MySQL versi 3 (3.06 dan lebih tinggi) dan Aurora MySQL 8.4 saja. Didukung pada instans yang disediakan dengan 2 vCPU saja. Tidak didukung pada Serverless v2.
decline Menolak kueri baru dengan kesalahan saat memori rendah. Tersedia dalam Aurora MySQL versi 3 dan 8.4.
kill_query Mengakhiri SELECT kueri yang sedang berjalan, dimulai dengan konsumen memori tertinggi, sampai memori kembali normal. DDL, DML lainnya, dan transaksi tidak terpengaruh. Tersedia dalam Aurora MySQL versi 3 dan 8.4. Saling eksklusif dengan kill_connect — jika keduanya disetel, hanya kill_connect mengaktifkan.
kill_connect Mengakhiri koneksi pengguna, memutar kembali transaksi aktif mereka dan mengakhiri pernyataan DDL. Lihat perilaku khusus versi di bawah ini.
penting

Anda harus memas tune_buffer_pool angkan dengan kill_query salah satu atau kill_connect dalam nilai aurora_oom_response parameter. Tanpa salah satu dari ini, pengubahan ukuran kumpulan buffer tidak terjadi bahkan ketika tune_buffer_pool disertakan.

perilaku khusus versi kill_connect

Versi Aurora MySQL Perilaku
Aurora MySQL 3.04 — Aurora MySQL 3.10 Menghentikan koneksi pengguna untuk membebaskan memori yang cukup bagi database untuk pulih dari tekanan memori.
Aurora MySQL 3.11+, Aurora MySQL 8.4 Menghentikan koneksi pengguna untuk membebaskan memori yang cukup bagi database untuk pulih dari tekanan memori. Juga menghentikan koneksi pengguna yang mencoba mengalokasikan memori selama tekanan memori.

Pada Serverless v2, Aurora merespons tekanan memori dengan terlebih dahulu meningkatkan ACU untuk menyediakan memori tambahan. Jika tekanan memori tetap ada saat penskalaan sedang berlangsung, Aurora dapat menghentikan koneksi yang ada untuk memulihkan memori. Penghentian koneksi yang mencoba mengalokasikan memori hanya terjadi ketika instance telah mencapai batas ACU maksimum yang dikonfigurasi dan tidak dapat lagi skala lebih lanjut.

Nilai default menurut versi

Aurora MySQL secara otomatis mengkonfigurasi aurora_oom_response berdasarkan versi mesin, jenis instance, dan memori yang tersedia.

Di Aurora MySQL 8.4, aurora_enable_memory_management kapan ON (default), Aurora secara otomatis mengelola tindakan pemulihan memori, dan aurora_oom_response nilainya tidak digunakan. Saat disetel keOFF, Aurora menggunakan aurora_oom_response nilai secara langsung, yang kosong secara default - artinya tidak ada tindakan pemulihan yang diambil kecuali Anda mengonfigurasinya secara eksplisit. Tabel default berikut hanya berlaku untuk Aurora MySQL versi 3.

Ambang instans kecil: ≤2 GiB untuk versi 3.04 dan 3.05. ≤4 GiB untuk versi 3.06 dan lebih tinggi.

Ambang instans besar: >2 GiB untuk versi 3.04 dan 3.05. > 4 GiB untuk versi 3.06 dan lebih tinggi.

Versi Ukuran instans Disediakan Tanpa server v2
Aurora MySQL 3.04—Aurora MySQL 3.05 Kecilprint,tuneprint
Besardinonaktifkan dinonaktifkan
Aurora MySQL 3.06 Kecilprint,tune,decline,kill_connectprint
Besardinonaktifkan dinonaktifkan
Aurora MySQL 3.07 Kecilprint,tune,decline,kill_connectprint
Besarprintprint
Aurora MySQL 3.08 Kecilprint,tune,tune_buffer_pool,decline,kill_connectprint
Besarprintprint
Aurora MySQL 3.09—Aurora MySQL 3.10 Kecilprint,tune,tune_buffer_pool,decline,kill_connectprint
Besarprint,decline,kill_connectprint,decline,kill_connect
Aurora MySQL 3.11+ Kecilprint,tune,tune_buffer_pool,decline,kill_connectprint,decline,kill_connect
Besarprint,decline,kill_connectprint,decline,kill_connect

Aurora Tanpa Server v2

T tune ind tune_buffer_pool akan dan tidak didukung pada Aurora Serverless v2. Semua tindakan lain bekerja sama seperti pada instance yang disediakan.

Ambang memori disesuaikan secara dinamis saat instance menskalakan ACU-nya. Kolom Serverless v2 pada tabel default di atas menunjukkan default efektif untuk setiap versi.

Memantau

Anda dapat memantau aktivitas penghindaran OOM melalui metode berikut.

Log kesalahan

Ketika tindakan pemulihan memori diambil, Aurora MySQL menulis pesan ke log kesalahan database. Awalan pesan bervariasi menurut versi dan dapat berubah di rilis mendatang:

  • Aurora MySQL versi 3: Pesan diawali denganOOM crash avoidance:.

  • Aurora MySQL versi 8.4: Pesan diawali denganAurora memory management:.

Pesan-pesan ini meliputi:

  • Tekanan memori terdeteksi dan pemberitahuan pulih dengan memori total dan tersedia

  • Rincian kueri atau koneksi dihentikan untuk pemulihan memori

  • Kueri kandidat diidentifikasi oleh print tindakan

Untuk melihat log kesalahan, lihatLog kesalahan Aurora MySQL.

CloudWatch Metrik Amazon

CloudWatch Metrik berikut melacak aktivitas penghindaran OOM di tingkat instans.

MetrikDeskripsiTersedia dariUnit
AuroraMemoryHealthStateMenunjukkan keadaan kesehatan memori. 0berarti sehat (tidak ada tekanan memori), 5 berarti tekanan memori sedang, 10 berarti tekanan memori kritis.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Pengukur
AuroraMemoryNumDeclinedSqlTotalJumlah kueri tambahan menurun sebagai bagian dari penghindaran OOM.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Hitungan
AuroraMemoryNumKillConnTotalJumlah tambahan koneksi ditutup sebagai bagian dari penghindaran OOM.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Hitungan
AuroraMemoryNumKillQueryTotalJumlah tambahan kueri yang dihentikan sebagai bagian dari penghindaran OOM.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Hitungan
AuroraMillisecondsSpentInOomRecoveryJumlah waktu sejak kesehatan memori turun di bawah keadaan normal.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Milidetik
AuroraNumOomRecoverySuccessfulBerapa kali kesehatan memori dikembalikan ke keadaan normal.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Hitungan
AuroraNumOomRecoveryTriggeredJumlah kali kesehatan memori turun di bawah keadaan normal.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Hitungan

CloudWatch Metrik umum berikut juga berguna untuk memantau tekanan memori:

MetrikDeskripsiUnit
FreeableMemoryJumlah memori yang tersedia. Melaporkan MemAvailable nilai dari/proc/meminfo.Byte
SwapUsageJumlah ruang swap yang digunakan.Byte

Untuk daftar lengkap metrik tingkat instance Aurora MySQL, lihat. Instance-level metrik untuk Amazon Aurora

Variabel status global

Variabel status berikut memberikan informasi tentang status OOM. Tersedia dalam Aurora MySQL versi 3.06.0 dan lebih tinggi.

VariabelDeskripsi
Aurora_oom_responseTindakan respons OOM yang saat ini aktif untuk instance DB ini.
aurora_oom_avoidance_recovery_stateApakah pemulihan OOM adalah ACTIVE atauINACTIVE.
aurora_oom_statusKeadaan kesehatan memori saat ini dari database: sehat (tidak ada tekanan memori), tekanan memori sedang, atau tekanan memori kritis. Tersedia dalam versi 3 saja.

Untuk menanyakan: SHOW GLOBAL STATUS LIKE 'aurora_oom%';

Untuk daftar lengkap variabel status global Aurora MySQL, lihatVariabel status global Aurora MySQL.

Wawasan Performa

Jika Performance Insights diaktifkan, Anda dapat menggunakan metrik OS-level memori untuk memantau tekanan memori dan mendeteksi peristiwa OOM. Metrik berikut tersedia di bawah pengh os.swap itung os.memory dan:

MetrikDeskripsi
os.memory.outOfMemoryKillCountJumlah pembunuhan OOM selama interval pengumpulan terakhir. Nilai bukan nol menunjukkan sistem operasi menghentikan proses karena kehabisan memori, yang biasanya menghasilkan restart database.
os.memory.totalJumlah total memori, dalam kilobyte.
os.memory.freeJumlah memori yang tidak ditetapkan, dalam kilobyte.
os.memory.activeJumlah memori yang ditetapkan, dalam kilobyte.
os.memory.cachedJumlah memori yang digunakan untuk sistem file caching I/O, dalam kilobyte.
os.memory.dirtyJumlah halaman memori yang dimodifikasi tetapi belum ditulis ke penyimpanan, dalam kilobyte.
os.memory.inactiveJumlah halaman memori yang jarang digunakan, dalam kilobyte.
os.memory.db.residentSetSizeJumlah memori yang digunakan oleh proses database (tidak termasuk memori bersama), dalam byte.
os.memory.db.cacheJumlah memori yang digunakan untuk cache halaman oleh proses database, dalam byte.
os.memory.db.swapJumlah memori swap yang digunakan oleh proses database, dalam byte.
os.swap.inJumlah memori yang ditukar dari disk, dalam kilobyte.
os.swap.outJumlah memori yang ditukar ke disk, dalam kilobyte.

Anda dapat memantau os.memory.outOfMemoryKillCount untuk mendeteksi ketika OS mematikan proses database karena kehabisan memori. Untuk daftar lengkap penghitung OS, lihat Penghitung sistem operasi.

Skema Performa

Jika performance_schema diaktifkan, Anda dapat menggunakan tabel ringkasan memori untuk mengidentifikasi komponen dan koneksi mana yang menghabiskan memori paling banyak. Lihat informasi yang lebih lengkap di Memecahkan masalah penggunaan memori untuk database Aurora MySQL.