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 danaurora_oom_responseparameter diabaikan. -
Setel
OFFuntuk 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_managementOFF
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.05 | Kecil | print,tune | print |
| Besar | dinonaktifkan | dinonaktifkan | |
| Aurora MySQL 3.06 | Kecil | print,tune,decline,kill_connect | print |
| Besar | dinonaktifkan | dinonaktifkan | |
| Aurora MySQL 3.07 | Kecil | print,tune,decline,kill_connect | print |
| Besar | print | print | |
| Aurora MySQL 3.08 | Kecil | print,tune,tune_buffer_pool,decline,kill_connect | print |
| Besar | print | print | |
| Aurora MySQL 3.09 — Aurora MySQL 3.10 | Kecil | print,tune,tune_buffer_pool,decline,kill_connect | print |
| Besar | print,decline,kill_connect | print,decline,kill_connect | |
| Aurora MySQL 3.11+ | Kecil | print,tune,tune_buffer_pool,decline,kill_connect | print,decline,kill_connect |
| Besar | print,decline,kill_connect | print,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.
| Metrik | Deskripsi | Tersedia dari | Unit |
|---|---|---|---|
AuroraMemoryHealthState | Menunjukkan 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.4 | Pengukur |
AuroraMemoryNumDeclinedSqlTotal | Jumlah kueri tambahan ditolak sebagai bagian dari penghindaran OOM. | Aurora MySQL 3.06.1+, Aurora MySQL 8.4 | Hitungan |
AuroraMemoryNumKillConnTotal | Jumlah tambahan koneksi ditutup sebagai bagian dari penghindaran OOM. | Aurora MySQL 3.06.1+, Aurora MySQL 8.4 | Hitungan |
AuroraMemoryNumKillQueryTotal | Jumlah tambahan kueri dihentikan sebagai bagian dari penghindaran OOM. | Aurora MySQL 3.06.1+, Aurora MySQL 8.4 | Hitungan |
AuroraMillisecondsSpentInOomRecovery | Jumlah waktu sejak kesehatan memori turun di bawah keadaan normal. | Aurora MySQL 3.08.0+, Aurora MySQL 8.4 | Milidetik |
AuroraNumOomRecoverySuccessful | Berapa kali kesehatan memori dikembalikan ke keadaan normal. | Aurora MySQL 3.08.0+, Aurora MySQL 8.4 | Hitungan |
AuroraNumOomRecoveryTriggered | Berapa kali kesehatan memori turun di bawah keadaan normal. | Aurora MySQL 3.08.0+, Aurora MySQL 8.4 | Hitungan |
CloudWatch Metrik umum berikut juga berguna untuk memantau tekanan memori:
| Metrik | Deskripsi | Unit |
|---|---|---|
FreeableMemory | Jumlah memori yang tersedia. Melaporkan MemAvailable nilai dari/proc/meminfo. | Byte |
SwapUsage | Jumlah 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.
| Variabel | Deskripsi |
|---|---|
Aurora_oom_response | Tindakan respons OOM yang saat ini aktif untuk instans DB ini. |
aurora_oom_avoidance_recovery_state | Apakah pemulihan OOM adalah ACTIVE atauINACTIVE. |
aurora_oom_status | Status 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:
| Metrik | Deskripsi |
|---|---|
os.memory.outOfMemoryKillCount | Jumlah OOM membunuh selama interval pengumpulan terakhir. Nilai bukan nol menunjukkan sistem operasi menghentikan proses karena kelelahan memori, yang biasanya menghasilkan restart database. |
os.memory.total | Jumlah total memori, dalam kilobyte. |
os.memory.free | Jumlah memori yang tidak ditetapkan, dalam kilobyte. |
os.memory.active | Jumlah memori yang ditetapkan, dalam kilobyte. |
os.memory.cached | Jumlah memori yang digunakan untuk sistem file caching I/O, dalam kilobyte. |
os.memory.dirty | Jumlah halaman memori dimodifikasi tetapi belum ditulis ke penyimpanan, dalam kilobyte. |
os.memory.inactive | Jumlah halaman memori yang jarang digunakan, dalam kilobyte. |
os.memory.db.residentSetSize | Jumlah memori yang digunakan oleh proses database (tidak termasuk memori bersama), dalam byte. |
os.memory.db.cache | Jumlah memori yang digunakan untuk cache halaman oleh proses database, dalam byte. |
os.memory.db.swap | Jumlah memori swap yang digunakan oleh proses database, dalam byte. |
os.swap.in | Jumlah memori yang ditukar dari disk, dalam kilobyte. |
os.swap.out | Jumlah 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.