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 danaurora_oom_responseparameter diabaikan. -
Setel
OFFke 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 ketikaaurora_enable_memory_managementdisetel 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 | 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
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 dengan
OOM crash avoidance:.Aurora MySQL versi 8.4: Pesan diawali dengan
Aurora 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
printtindakan
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 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.4 | Pengukur |
AuroraMemoryNumDeclinedSqlTotal | Jumlah kueri tambahan menurun 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 yang 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 | Jumlah 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 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.
| Variabel | Deskripsi |
|---|---|
Aurora_oom_response | Tindakan respons OOM yang saat ini aktif untuk instance DB ini. |
aurora_oom_avoidance_recovery_state | Apakah pemulihan OOM adalah ACTIVE atauINACTIVE. |
aurora_oom_status | Keadaan 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:
| Metrik | Deskripsi |
|---|---|
os.memory.outOfMemoryKillCount | Jumlah pembunuhan OOM selama interval pengumpulan terakhir. Nilai bukan nol menunjukkan sistem operasi menghentikan proses karena kehabisan 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 yang 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 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.