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 ketika memori rendah. Tindakan ini membantu mencegah tidak tersedianya database karena kelelahan 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 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 diatur ke. aurora_enable_memory_management OFF

Tindakan respons OOM

Tindakan berikut dapat dimasukkan dalamaurora_oom_response, terdaftar dari yang paling sedikit hingga yang 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 Menyusut 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 di v2 Tanpa Server.
tune_buffer_pool Menyusutkan kolam buffer InnoDB untuk membebaskan memori. Ukuran kolam buffer dipulihkan saat memori kembali normal. Halaman cache sebelumnya yang diusir tidak dimuat ulang secara otomatis; halaman baru hanya di-cache saat kueri berikutnya mengaksesnya. Aurora MySQL versi 3 (3.06 dan lebih tinggi) dan Aurora MySQL 8.4 saja. Didukung pada instance yang disediakan hanya dengan 2 vCPU. Tidak didukung di 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 berjalan, dimulai dengan konsumen memori tertinggi, hingga 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 diatur, 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 memasangkan tune_buffer_pool dengan salah satu kill_query atau kill_connect dalam nilai aurora_oom_response parameter. Tanpa salah satu dari ini, pengubahan ukuran kolam 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 Mengakhiri koneksi pengguna untuk membebaskan memori yang cukup untuk database untuk pulih dari tekanan memori.
Aurora MySQL 3.11+, Aurora MySQL 8.4 Mengakhiri koneksi pengguna untuk membebaskan memori yang cukup untuk database untuk pulih dari tekanan memori. Juga mengakhiri 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 berlanjut 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 menskalakan lebih lanjut.

Nilai default berdasarkan versi

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

Di Aurora MySQL 8.4, kapan aurora_enable_memory_management (ONdefault), Aurora secara otomatis mengelola tindakan pemulihan memori, dan nilainya tidak digunakan. aurora_oom_response Ketika diatur keOFF, Aurora menggunakan aurora_oom_response nilai secara langsung, yang kosong secara default — yang berarti tidak ada tindakan pemulihan yang diambil kecuali Anda secara eksplisit mengonfigurasinya. Tabel default berikut berlaku untuk Aurora MySQL versi 3 saja.

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

Ambang instance 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.05Kecilprint,tuneprint
Besardinonaktifkandinonaktifkan
Aurora MySQL 3.06Kecilprint,tune,decline,kill_connectprint
Besardinonaktifkandinonaktifkan
Aurora MySQL 3.07Kecilprint,tune,decline,kill_connectprint
Besarprintprint
Aurora MySQL 3.08Kecilprint,tune,tune_buffer_pool,decline,kill_connectprint
Besarprintprint
Aurora MySQL 3.09 — Aurora MySQL 3.10Kecilprint,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

tune_buffer_poolTindakan tune dan tidak didukung pada Aurora Serverless v2. Semua tindakan lain bekerja sama seperti pada instance yang disediakan.

Ambang batas memori menyesuaikan secara dinamis saat instance menskalakan ACU-nya. Kolom v2 Tanpa Server 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 dengan. OOM crash avoidance:

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

Pesan-pesan ini meliputi:

  • Tekanan memori terdeteksi dan memulihkan notifikasi dengan memori total dan tersedia

  • Rincian kueri atau koneksi yang diakhiri untuk pemulihan memori

  • Kueri kandidat diidentifikasi oleh tindakan print

Untuk melihat log kesalahan, lihatLog kesalahan Aurora MySQL.

CloudWatch Metrik Amazon

CloudWatch Metrik berikut melacak aktivitas penghindaran OOM di tingkat instans.

MetrikDeskripsiTersedia dariUnit
AuroraMemoryHealthStateMenunjukkan kondisi 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 ditolak 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 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
AuroraNumOomRecoveryTriggeredBerapa 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 instans MySQL Aurora, 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 instans DB ini.
aurora_oom_avoidance_recovery_stateApakah pemulihan OOM adalah ACTIVE atauINACTIVE.
aurora_oom_statusStatus kesehatan memori database saat ini: sehat (tidak ada tekanan memori), tekanan memori sedang, atau tekanan memori kritis. Hanya tersedia dalam versi 3.

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

Untuk daftar lengkap variabel status global Aurora MySQL, lihat. Variabel 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 os.memory dan os.swap counter:

MetrikDeskripsi
os.memory.outOfMemoryKillCountJumlah OOM membunuh selama interval pengumpulan terakhir. Nilai bukan nol menunjukkan sistem operasi menghentikan proses karena kelelahan 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 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 kapan OS mematikan proses database karena kehabisan memori. Untuk daftar lengkap penghitung OS, lihat Metrik OS Performance Insights.

Skema Performa

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