Praktik terbaik manajemen memori

Instance Memorystore for Redis, jika tidak dikelola dan dikonfigurasi dengan benar, dapat mengalami tekanan memori yang dapat memengaruhi performa aplikasi. Halaman ini menjelaskan praktik terbaik yang dapat Anda gunakan untuk mengelola penggunaan memori instance secara efisien.

Dalam topik ini:

Konsep pengelolaan memori

Bagian ini memperkenalkan konsep yang perlu Anda pahami untuk mengelola penggunaan memori instance.

Kapasitas instance

  • Kapasitas instance adalah jumlah memori yang Anda sediakan dalam Gigabyte (GB), dan yang ditagih kepada Anda. Untuk mengetahui detail selengkapnya tentang cara memilih kapasitas instance yang tepat, lihat Menyesuaikan ukuran instance Memorystore.

Konfigurasi maxmemory

  • Maxmemory adalah konfigurasi Redis yang memungkinkan Anda menetapkan batas memori saat kebijakan pengusiran Anda berlaku. Memorystore for Redis menetapkan konfigurasi ini sebagai maxmemory-gb. Saat Anda membuat instance, maxmemory-gb disetel ke kapasitas instance. Bergantung pada metrik rasio penggunaan memori sistem, Anda mungkin perlu menurunkan batas maxmemory-gb untuk menyediakan overhead memori bagi lonjakan workload.

    Untuk mengetahui detail selengkapnya, lihat Mengelola rasio penggunaan memori sistem.

    Untuk mempelajari cara menyesuaikan maxmemory-gb, lihat Mengonfigurasi instance Redis.

Rasio penggunaan memori sistem

  • Metrik rasio penggunaan memori sistem memungkinkan Anda mengukur penggunaan memori instance relatif terhadap memori sistem. Memori sistem dikelola secara otomatis oleh Memorystore untuk menangani lonjakan penggunaan memori yang disebabkan oleh operasi yang intensif memori dan fragmentasi memori yang umum terjadi di Redis open source.

    Jika metrik rasio penggunaan memori sistem melebihi 80%, hal ini menunjukkan bahwa instance mengalami tekanan memori dan Anda harus mengikuti petunjuk di Mengelola rasio penggunaan memori sistem Anda. Jika Anda tidak mengambil tindakan dan penggunaan memori Anda terus meningkat, Anda berisiko mengalami error instance karena memori tidak cukup. Metrik rasio penggunaan memori sistem Anda mungkin melebihi 80% karena fragmentasi memori. Atau, jika metrik melonjak dengan cepat hingga 80% atau lebih, Anda mungkin telah menggunakan salah satu operasi yang menggunakan banyak memori.

    Anda harus memiliki rasio penggunaan memori sistem sebesar 50% atau kurang selama update pemeliharaan. Selain itu, terkadang mengekspor memerlukan rasio penggunaan memori sistem sebesar 50% atau kurang.

Memori yang digunakan

  • Metrik memori yang digunakan menunjukkan jumlah data dalam instance Memorystore Anda. Memori yang digunakan instance dapat bertambah hingga batas konfigurasi maxmemory-gb. Jika memori yang digunakan melebihi batas maxmemory-gb, kebijakan pengusiran Anda akan berlaku.

Kebijakan pengusiran

  • Kebijakan pengusiran instance Anda (juga dikenal sebagai kebijakan maxmemory) menentukan cara Redis mengusir kunci saat data instance Anda mencapai batas maxmemory-gb. Redis mengeluarkan kunci sebagai bagian dari kasus penggunaan cache normal. Pengusiran kunci terjadi sebagai proses latar belakang, sehingga kunci tidak langsung dikeluarkan setelah batas maxmemory-gb tercapai. Kecepatan penulisan yang tinggi dapat melampaui pengusiran kunci sehingga menyebabkan kondisi kehabisan memori.

    Kebijakan penghapusan default instance Memorystore adalah volatile-lru. Jika Anda menggunakan kebijakan penggantian volatile-*, pastikan Anda menyetel TTL pada kunci yang ingin Anda hapus, jika tidak, Redis tidak memiliki kunci untuk diganti.

    Untuk mengetahui daftar kebijakan pengusiran, lihat Kebijakan maxmemory.

    Untuk mempelajari cara mengubah kebijakan pengusiran, lihat Mengonfigurasi instance Redis.

Fragmentasi memori

  • Fragmentasi memori dapat menyebabkan instance Memorystore Anda kehabisan memori meskipun rasio memori yang digunakan terhadap maxmemory-gb rendah. Fragmentasi memori terjadi saat sistem operasi mengalokasikan halaman memori yang tidak dapat dimanfaatkan sepenuhnya oleh Redis setelah operasi tulis dan hapus berulang. Penumpukan halaman tersebut dapat menyebabkan sistem kehabisan memori dan akhirnya menyebabkan server Redis error. Konfigurasi activedefrag Redis dapat membantu mengurangi fragmentasi.

Defragmentasi aktif

  • Redis versi 4.0 dan yang lebih tinggi menyediakan konfigurasi activedefrag. Jika memungkinkan, Anda harus membuat instance Memorystore menggunakan Redis 4.0. Memorystore menetapkan activedefrag ke "tidak" secara default. Menetapkan activedefrag ke "ya" akan berdampak pada CPU, tetapi dapat membantu memitigasi fragmentasi memori, yang berkontribusi pada masalah kehabisan memori.

    Jika metrik rasio penggunaan memori sistem menunjukkan fragmentasi memori, Anda harus mengaktifkan activedefrag. Jika tidak, activedefrag tetap menjadi setelan opsional.

Operasi intensif memori

Operasi berikut menggunakan memori yang signifikan, terutama saat dijalankan bersamaan dengan kecepatan penulisan yang tinggi:

Operasi ekspor

Fitur export Memorystore menggunakan operasi BGSAVE Redis, yang menggunakan salin saat menulis. Bergantung pada ukuran data, volume penulisan, dan kunci yang diakses, memori yang diperlukan untuk ekspor dapat dua kali lebih besar dari ruang yang ditempati data Anda. Oleh karena itu, agar ekspor berhasil, Anda mungkin perlu mengurangi batas maxmemory-gb hingga 50% dari kapasitas instance Anda selama ekspor.

Operasi penskalaan dan upgrade versi

Menskalakan atau Mengupgrade selama periode beban tulis tinggi dapat memberikan tekanan memori pada instance Anda karena overhead memori yang disebabkan oleh replikasi. Selain itu, beban baca yang tinggi dapat meningkatkan ukuran buffer output Redis, sehingga meningkatkan tekanan memori. Jika operasi penskalaan atau upgrade gagal karena tekanan memori, Anda harus:

  • Kurangi maxmemory-gb hingga 50% dari kapasitas instance Anda sebelum operasi penskalaan/upgrade. Jika memungkinkan, Anda juga harus menurunkan maxmemory selama periode traffic instance rendah, karena tindakan ini mengurangi dampak negatif penurunan maxmemory terhadap rasio hit cache.
  • Lakukan penskalaan/upgrade selama periode penulisan rendah.

Pemeliharaan

Pemeliharaan juga menambah tekanan memori pada instance Anda. Anda harus mengambil tindakan agar metrik Rasio Penggunaan Memori Sistem berada pada 50% atau lebih rendah pada saat pemeliharaan terjadwal. Anda dapat melakukannya dengan menjadwalkan waktu saat traffic instance rendah, atau dengan menskalakan ukuran instance Anda untuk sementara selama periode pemeliharaan sehingga metrik Rasio Penggunaan Memori Sistem berada pada 50% atau lebih rendah.

Memantau penggunaan memori instance

Pantau metrik dan tetapkan pemberitahuan yang diuraikan dalam bagian ini. Metrik dan pemberitahuan ini memberi Anda insight tentang penggunaan memori instance Anda. Untuk mempelajari cara melihat metrik dan menyetel pemberitahuan, lihat Memantau instance Redis.

Metrik Alamat metrik lengkap
Maxmemory redis.googleapis.com/stats/memory/maxmemory
Penggunaan memori redis.googleapis.com/stats/memory/usage
Rasio penggunaan memori redis.googleapis.com/stats/memory/usage_ratio
Durasi kelebihan beban memori sistem redis.googleapis.com/stats/memory/system_memory_overload_duration
Rasio penggunaan memori sistem redis.googleapis.com/stats/memory/system_memory_usage_ratio
Rasio cache ditemukan redis.googleapis.com/stats/memory/cache_hit_ratio
Kunci yang dapat habis masa berlakunya redis.googleapis.com/keyspace/keys_with_expiration
Kunci yang sudah berakhir redis.googleapis.com/stats/expired_keys
Kunci yang dikeluarkan redis.googleapis.com/stats/evicted_keys

Rasio Penggunaan Memori

Metrik rasio penggunaan memori menunjukkan seberapa dekat ukuran set kerja Anda dengan batas maxmemory-gb. Kecuali jika kebijakan pengusiran ditetapkan ke no-eviction, data instance yang mencapai maxmemory tidak selalu menunjukkan adanya masalah. Namun, penghapusan kunci adalah proses latar belakang yang membutuhkan waktu. Jika memiliki kecepatan penulisan yang tinggi, Anda dapat kehabisan memori sebelum Redis sempat mengeluarkan kunci untuk mengosongkan ruang.

Rasio penggunaan memori sistem

Rasio penggunaan memori sistem adalah metrik penting untuk dipantau. Untuk memastikan instance memiliki memori yang cukup untuk mendukung workload Anda dan operasi intensif memori lainnya, penting untuk selalu menyediakan memori sistem yang cukup.

Tetapkan pemberitahuan untuk memberi tahu Anda jika metrik rasio penggunaan memori sistem mencapai 80%. Jika mencapai 80%, Anda harus mulai memantau metrik rasio penggunaan memori sistem dengan lebih cermat. Jika rasio penggunaan memori sistem terus meningkat secara signifikan, Anda harus mengaktifkan activedefrag, menurunkan maxmemory, dan mempertimbangkan untuk menskalakan instance.

Setelah rasio penggunaan memori sistem mencapai 100%, setiap operasi yang selanjutnya meningkatkan jejak memori instance Anda akan diblokir dan Redis akan menampilkan error berikut:

-OOM command not allowed under OOM prevention.

Lihat Mengelola rasio penggunaan memori sistem untuk mengetahui detail selengkapnya.

Durasi kelebihan beban memori sistem

Jika penggunaan memori terlalu tinggi, Memorystore akan memblokir penulisan ke instance Anda agar instance tetap dalam kondisi baik. Durasi kelebihan beban memori sistem melacak berapa lama instance Anda berada dalam status penulisan yang diblokir.

Anda harus Menyetel pemberitahuan untuk metrik ini agar Anda tahu kapan penulisan diblokir untuk instance Anda. Selain itu, Anda dapat merujuk kembali ke metrik ini untuk memecahkan masalah terkait penerimaan error -OOM command not allowed under OOM prevention..

Rasio cache ditemukan

Anda harus memantau rasio hit cache secara rutin agar Anda mengetahui persentase pencarian kunci yang berhasil ditampilkan oleh kunci di instance Redis Anda. Secara umum, rasio hit cache yang lebih tinggi lebih baik daripada rasio hit cache yang lebih rendah. Anda harus mencatat rasio hit cache sebelum melakukan perubahan konfigurasi besar seperti menyesuaikan batas maxmemory-gb, mengubah kebijakan pengusiran, atau menskalakan instance. Kemudian, setelah Anda mengubah instance, periksa rasio hit cache lagi untuk melihat pengaruh perubahan Anda terhadap metrik ini.

Kunci yang dapat habis masa berlakunya dan Kunci yang sudah habis masa berlakunya

Metrik Stackdriver expirable keys memantau jumlah kunci yang ditetapkan untuk habis masa berlakunya. Jika tidak ada kunci yang dapat berakhir, hal ini dapat mengindikasikan bahwa Anda tidak menyetel TTL pada kunci. Dalam kasus seperti itu, saat data instance Anda mencapai batas maxmemory-gb, tidak ada kunci yang dapat dikeluarkan sehingga dapat menyebabkan kondisi kehabisan memori jika Anda menggunakan kebijakan pengeluaran volatile-*.

Metrik lain yang dapat Anda pantau adalah kunci yang sudah tidak berlaku. Jika metrik menampilkan banyak kunci yang sudah habis masa berlakunya, tetapi Anda masih melihat tekanan memori pada instance, Anda harus menurunkan maxmemory-gb.

Mengatasi kondisi kehabisan memori

Berikut adalah beberapa praktik terbaik yang harus Anda ikuti jika instance Anda mengalami tekanan memori atau mengalami error kehabisan memori.

  1. Jika Anda menggunakan kebijakan penggantian volatile-*, pastikan Anda menetapkan TTL pada kunci yang ingin Anda hapus. Lihat Kebijakan penggusuran untuk mengetahui detail selengkapnya.

  2. Untuk instance yang menjalankan Redis 4.0 dan yang lebih tinggi:

    1. Aktifkan activedefrag untuk instance Anda. Lihat Defragmentasi aktif untuk mengetahui detail selengkapnya.
  3. Pelajari cara menggunakan metrik untuk memecahkan masalah kondisi kehabisan memori, dan dapatkan insight tentang penggunaan memori instance Anda: Memantau penggunaan memori instance Anda, Mengelola rasio penggunaan memori sistem Anda.

  4. Pelajari cara menyesuaikan maxmemory saat menjalankan Operasi yang membutuhkan banyak memori.

  5. Jika metrik rasio penggunaan memori sistem melebihi 80%, kurangi batas maxmemory-gb instance Anda. Lihat Mengelola rasio penggunaan memori sistem Anda untuk mengetahui detail selengkapnya.

  6. Pertimbangkan untuk meningkatkan kapasitas instance Anda.

  7. Jika Anda masih mengalami kondisi OOM, hubungi Dukungan Google Cloud Platform.

Menyesuaikan ukuran instance Memorystore

Bagian ini membahas tiga pendekatan berbeda yang membantu Anda menyesuaikan ukuran instance dengan tepat berdasarkan workload:

Menentukan ukuran awal instance Memorystore

Pertama, Anda harus memilih apakah Anda menginginkan instance Paket Standar atau Paket Dasar. Untuk mempelajari lebih lanjut tingkat Memorystore for Redis, lihat Kemampuan tingkat Redis. Setelah memilih tingkat yang tepat untuk aplikasi Anda, ikuti langkah-langkah berikut untuk menentukan ukuran instance yang Anda butuhkan:

  1. Tentukan ukuran data Anda.

    • Perkirakan jumlah kunci, dan ukuran rata-rata kunci, yang akan ditulis aplikasi Anda ke instance Redis Anda. Kalikan nilai ini untuk mendapatkan perkiraan kasar ukuran instance yang Anda butuhkan.
  2. Pilih kebijakan pengusiran.

    • Jika Anda menggunakan kebijakan maxmemory noeviction, ukuran instance Anda harus cukup besar untuk menampung workload puncak dan set kerja Anda. Jika Anda kehabisan memori dengan kebijakan maxmemory ini, instance Anda dapat mengalami kondisi kehabisan memori.
    • Kebijakan pengusiran lainnya tidak memengaruhi ukuran instance yang harus Anda sediakan.
  3. Menyediakan memori tambahan untuk instance Paket Standar

    • Tidak seperti instance Tingkat Dasar, instance Tingkat Standar mencadangkan 10% kapasitas instance sebagai buffer replikasi. Jika Anda memilih instance Tingkat Standar, pastikan Anda mengambil estimasi data dari langkah pertama dan menyediakan 10% ekstra untuk buffer replikasi.
  4. Perkirakan kecepatan penulisan rata-rata dan puncak Anda

    • Jika memungkinkan, perkirakan kecepatan tulis dan ukuran kunci yang akan digunakan aplikasi Anda. Kecepatan penulisan dibandingkan dengan kecepatan penghapusan kunci menentukan seberapa cepat instance Anda akan berkembang dari waktu ke waktu.
  5. Tingkatkan skala untuk mencapai rasio cache ditemukan yang diinginkan

    • Pantau rasio hit cache, dan jika Anda tidak mendapatkan hit cache yang berhasil sebanyak yang Anda inginkan, berarti Anda perlu meningkatkan ukuran instance, atau memastikan bahwa aplikasi Anda menulis kunci ke instance Memorystore yang diminta, dan tidak dipenuhi.

Tentukan apakah instance Anda memblokir penulisan karena kondisi kehabisan memori

Jika Anda mendapatkan error berikut:

-OOM command not allowed under OOM prevention.

Kemudian, periksa apakah:

  1. Metrik rasio penggunaan memori sistem melebihi 80% tepat sebelum instance Anda mulai mengalami masalah.
  2. Rasio penggunaan memori sistem meningkat sangat cepat sebelum masalah pada instance Anda terjadi.
  3. Metrik durasi kelebihan beban memori sistem menunjukkan nilai di atas nol selama periode yang sama saat Anda mengalami penulisan yang diblokir.

Jika demikian, kemungkinan ini menunjukkan bahwa instance memblokir penulisan karena kondisi kehabisan memori.

Mengelola rasio penggunaan memori sistem

Tetapkan pemberitahuan untuk memberi tahu Anda jika metrik rasio penggunaan memori sistem melebihi 80%. Jika rasio penggunaan memori sistem melebihi 80%, Anda harus mengambil tindakan yang sesuai agar instance tidak kehabisan memori. Bergantung pada volume penulisan dan pola akses kunci, penggunaan memori sistem berpotensi meningkat dengan cepat hingga 100%. Memorystore menyediakan cara berikut untuk mengelola rasio penggunaan memori sistem:

  • Aktifkan activedefrag untuk instance yang menjalankan Redis versi 4.0 dan yang lebih tinggi.
  • Turunkan batas maxmemory-gb instance Anda.
  • Menskalakan instance.
  • Pilih kebijakan pengusiran yang sesuai.
  • Menetapkan TTL pada kunci sementara.
  • Menghapus kunci secara manual dari instance Anda.

Aktifkan activedefrag

Jika rasio penggunaan memori sistem melebihi 80%, aktifkan activedefrag (untuk instance yang menjalankan Redis versi 4.0 dan yang lebih tinggi). Defragmentasi dapat memerlukan waktu berjam-jam untuk melepaskan memori yang terfragmentasi. Jika traffic penulisan tinggi, defragmentasi saja mungkin tidak cukup untuk menghentikan instance Anda kehabisan memori. Oleh karena itu, Anda mungkin perlu menerapkan rekomendasi berikut:

Menurunkan batas maxmemory instance Anda

Jika rasio penggunaan memori sistem melebihi 80%, Anda harus menurunkan maxmemory-gb, tetapi terlebih dahulu lihat bagaimana rasio penggunaan memori sistem telah berubah dari waktu ke waktu untuk menentukan batas maxmemory-gb baru yang akan ditetapkan.

Skenario 1: Rasio penggunaan memori sistem telah meningkat secara bertahap dan perlahan. Fragmentasi kemungkinan menjadi masalah, dan Anda harus menurunkan maxmemory-gb secara bertahap hingga rasio penggunaan memori sistem stabil di bawah 80%.

Skenario 2: Rasio penggunaan memori sistem meningkat dengan cepat, dan Anda melihat beban tulis yang signifikan pada instance Anda. Operasi intensif memori kemungkinan menyebabkan lonjakan. Dalam situasi ini, Anda harus menurunkan batas maxmemory-gb dengan inkrement yang lebih besar untuk memastikan instance menghindari kondisi kehabisan memori, atau pulih dari kondisi kehabisan memori. Anda harus memperhatikan bahwa menurunkan maxmemory dapat mengurangi rasio hit cache instance Anda. Rasio hit cache yang jauh lebih rendah menunjukkan bahwa Anda harus menskalakan instance agar aplikasi Anda dapat memanfaatkan keuntungan menggunakan Redis. Untuk mempelajari cara menyesuaikan konfigurasi maxmemory-gb, lihat Mengonfigurasi instance Redis.

Menskalakan instance

Ikuti petunjuk di Menskalakan instance Redis untuk meningkatkan kapasitas instance Anda.

Contoh penskalaan Maxmemory:

Jika Anda memiliki instance 10 GB dengan maxmemory-gb yang ditetapkan ke 8 GB, Anda memiliki 8 GB untuk menyimpan kunci dan 2 GB overhead memori. Jika Anda menskalakan instance menjadi 20 GB, maxmemory-gb akan diskalakan menjadi 16 GB. Oleh karena itu, instance Anda kini memiliki memori 16 GB untuk menyimpan kunci, dan overhead 4 GB. Lihat Menskalakan instance Redis untuk mengetahui petunjuk tentang cara menambah atau mengurangi ukuran instance Anda.

Pilih kebijakan pengusiran yang sesuai

Jika Anda menyimpan data yang mudah berubah, pilih salah satu volatile-* kebijakan pengusiran. Jika Anda menyimpan data yang tidak mudah berubah, pilih salah satu kebijakan allkeys-* berikut.

Menghapus kunci secara manual dari instance Anda

Anda dapat memperbaiki kondisi kehabisan memori dengan menghapus kunci dari instance Anda secara manual. Ini adalah solusi sementara yang membantu Anda meningkatkan kualitas instance.