Database Autonomy Service (DAS) memasukkan rasio fragmentasi memori sebagai salah satu faktor dalam fitur inspeksi dan penilaian untuk instans Redis. Topik ini menjelaskan apa itu fragmentasi memori, penyebabnya, cara mengukurnya, serta kapan perlu mengambil tindakan.
Cara kerja fragmentasi memori
Fragmentasi memori terjadi ketika memori bebas tersedia tetapi terbagi menjadi segmen-segmen kecil yang tidak bersebelahan. Meskipun total memori bebas melebihi N byte, sistem operasi tidak dapat memenuhi permintaan untuk blok memori kontigu berukuran N byte—segmen-segmen yang tersebar tersebut merupakan fragmen memori.
Pada Tair (Redis OSS-Compatible), fragmen memori tidak mengurangi jumlah memori yang dialokasikan untuk instans Anda dan tidak menimbulkan biaya tambahan.
Sebagai contoh, jika sebuah instans Tair (Redis OSS-Compatible) memiliki kapasitas 1 GB dengan 700 MB sedang digunakan, sisa 300 MB (1 GB − 700 MB) tetap tersedia meskipun rasio fragmentasi memori mencapai 2—artinya data secara fisik menempati 2 GB memori sistem.
Penyebab fragmentasi memori
Fragmentasi memori memiliki dua akar penyebab.
Perilaku alokator memori (internal)
Redis mendukung beberapa alokator memori: libc, jemalloc, dan tcmalloc. jemalloc merupakan alokator bawaan. Alih-alih mengalokasikan jumlah memori yang tepat sesuai permintaan aplikasi, jemalloc membulatkan ke batas pangkat-dua terdekat—8 byte, 16 byte, 32 byte, 2 KB, 4 KB, dan seterusnya. Selisih antara jumlah yang diminta dan jumlah yang dialokasikan menjadi fragmen.
Perubahan pasangan kunci-nilai (eksternal)
Ketika pasangan kunci-nilai dimodifikasi atau dihapus, memori yang ditempatinya dilepas atau diubah ukurannya. Karena ukuran blok yang dialokasikan jarang sesuai persis dengan ukuran data baru, celah-celah tersebut menumpuk seiring waktu.
Periksa rasio fragmentasi memori
Jalankan perintah berikut di DAS untuk melihat detail penggunaan memori:
INFO memoryOutput mencakup:
# Memory
used_memory:350458970752
used_memory_human:326.39G
used_memory_rss:349066919936
used_memory_rss_human:325.09G
…
mem_fragmentation_ratio:1.00| Field | Description |
|---|---|
used_memory | Memori yang diminta Redis untuk menyimpan data |
used_memory_rss | Memori fisik yang dialokasikan sistem operasi untuk Redis, termasuk overhead fragmen |
mem_fragmentation_ratio | Rasio fragmentasi memori saat ini |
Rasio tersebut dihitung sebagai:
mem_fragmentation_ratio = used_memory_rss / used_memoryInterpretasi rasio
| Rasio | Status | Aksi yang direkomendasikan |
|---|---|---|
| 1,0–1,5 | Normal | Tidak perlu tindakan |
| > 1,5 | Tinggi | Memori terfragmentasi melebihi separuh dari memori yang digunakan—lakukan investigasi dan ambil tindakan korektif |