Praktik terbaik pengelolaan memori

Jika tidak dikelola dan dikonfigurasi dengan benar, instance Memorystore for Redis 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

Konfigurasi maxmemory

  • Maxmemory adalah konfigurasi Redis yang memungkinkan Anda menetapkan batas memori yang digunakan untuk menerapkan kebijakan penghapusan. Memorystore for Redis menetapkan konfigurasi ini sebagai maxmemory-gb. Saat Anda membuat instance, maxmemory-gb akan ditetapkan ke kapasitas instance. Bergantung pada metrik rasio penggunaan memori sistem, Anda mungkin diminta untuk menurunkan batas maxmemory-gb guna memberikan overhead memori untuk lonjakan beban kerja.

    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 suatu instance yang relatif terhadap memori sistem. Memori sistem dikelola secara otomatis oleh Memorystore untuk menangani lonjakan penggunaan memori yang disebabkan oleh operasi intensif memori dan fragmentasi memori yang biasa terjadi pada Redis open source.

    Jika metrik rasio penggunaan memori sistem melebihi 80%, ini menunjukkan bahwa instance berada di bawah tekanan memori dan Anda harus mengikuti petunjuk di bagian Mengelola rasio penggunaan memori sistem Anda. Jika Anda tidak mengambil tindakan dan penggunaan memori terus bertambah, Anda berisiko mengalami error pada 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 tinggi, Anda mungkin telah menggunakan salah satu operasi intensif memori.

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

Memori yang digunakan

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

Kebijakan penghapusan

  • Kebijakan penghapusan instance (juga dikenal sebagai kebijakan maxmemory) menentukan cara Redis mengeluarkan kunci saat data instance Anda mencapai batas maxmemory-gb. Redis mengeluarkan kunci sebagai bagian dari kasus penggunaan cache normal. Penghapusan kunci terjadi sebagai proses di latar belakang, sehingga kunci tidak segera dikeluarkan setelah batas maxmemory-gb tercapai. Kecepatan tulis yang tinggi mungkin melebihi penghilangan kunci yang mengakibatkan kondisi kehabisan memori.

    Kebijakan penghapusan default instance Memorystore adalah volatile-lru. Jika Anda menggunakan kebijakan penghapusan volatile-*, pastikan Anda menetapkan TTL pada kunci yang masa berlakunya ingin Anda habiskan. Jika tidak, Redis tidak memiliki kunci untuk dikeluarkan.

    Untuk mengetahui daftar kebijakan penghapusan, lihat Kebijakan Maxmemory.

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

Fragmentasi memori

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

Defragmentasi aktif

  • Redis versi 4.0 dan yang lebih baru menyediakan konfigurasi activedefrag. Jika memungkinkan, sebaiknya buat instance Memorystore menggunakan Redis 4.0. Memorystore menetapkan activedefrag ke "no" secara default. Menetapkan activedefrag ke "yes" akan menurunkan nilai CPU, tetapi dapat membantu mengurangi fragmentasi memori, yang menyebabkan masalah kehabisan memori.

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

Operasi intensif memori

Operasi berikut menggunakan memori yang signifikan, terutama saat dijalankan bersama dengan kecepatan tulis yang tinggi:

Operasi ekspor

Fitur ekspor Memorystore menggunakan operasi BGSAVE Redis, yang menggunakan salin-saat-tulis. Bergantung pada ukuran data, volume tulis, dan tombol yang disentuh, memori yang diperlukan untuk ekspor dapat menggandakan ukuran ruang yang ditempati data Anda. Oleh karena itu, agar ekspor berhasil, Anda mungkin perlu mengurangi batas maxmemory-gb menjadi 50% dari kapasitas instance selama ekspor.

Operasi penskalaan dan upgrade versi

Penskalaan atau Mengupgrade selama periode beban tulis yang 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, yang menyebabkan peningkatan tekanan memori. Jika operasi penskalaan atau upgrade gagal karena tekanan memori, Anda harus:

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

Pemeliharaan

Pemeliharaan juga menambahkan tekanan memori ke 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 meningkatkan ukuran instance Anda untuk sementara selama masa pemeliharaan sehingga metrik Rasio Penggunaan Memori Sistem berada pada 50% atau lebih rendah.

Memantau penggunaan memori instance

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

Metrik Alamat metrik lengkap
Memori maksimum 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 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 mencapai batas maxmemory-gb. Data instance yang mencapai maxmemory tidak selalu menunjukkan adanya masalah, kecuali kebijakan penghapusan ditetapkan ke tanpa penghapusan. Namun, penghapusan kunci adalah proses di latar belakang yang memerlukan waktu. Jika memiliki kecepatan tulis yang tinggi, Anda bisa kehabisan memori sebelum Redis memiliki waktu untuk mengeluarkan kunci guna mengosongkan ruang.

Rasio penggunaan memori sistem

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

Setel pemberitahuan untuk memberi tahu Anda jika metrik rasio penggunaan memori sistem mencapai 80%. Jika sudah 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%, operasi apa pun yang lebih 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 memori sistem

Jika penggunaan memori Anda terlalu tinggi, Memorystore akan memblokir penulisan ke instance agar instance Anda tetap sehat. Durasi kelebihan memori sistem melacak durasi instance penulisan diblokir.

Anda harus Menetapkan pemberitahuan untuk metrik ini agar Anda mengetahui kapan operasi tulis diblokir untuk instance Anda. Selain itu, Anda dapat melihat kembali metrik ini untuk memecahkan masalah penerimaan error -OOM command not allowed under OOM prevention..

Rasio cache-hit

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

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

Metrik Stackdriver kunci yang dapat habis masa berlakunya memantau jumlah kunci yang ditetapkan untuk masa berlaku. Jika tidak ada kunci yang dapat habis masa berlakunya, hal ini dapat menjadi indikasi bahwa Anda tidak menetapkan TTL pada kunci. Dalam kasus tersebut, saat data instance Anda mencapai batas maxmemory-gb, tidak ada kunci yang akan dikeluarkan yang dapat mengakibatkan kondisi memori habis jika Anda menggunakan kebijakan penghapusan volatile-*.

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

Menyelesaikan kondisi kehabisan memori

Di bawah ini adalah beberapa praktik terbaik yang harus Anda ikuti jika instance mengalami tekanan memori atau mengalami error memori habis.

  1. Jika menggunakan kebijakan penghapusan volatile-*, pastikan Anda menetapkan TTL pada kunci yang ingin habis masa berlakunya. Lihat Kebijakan penggusuran untuk detail selengkapnya.

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

    1. Aktifkan activedefrag untuk instance Anda. Lihat Defragmentasi aktif untuk detail selengkapnya.
  3. Pelajari cara menggunakan metrik untuk mengatasi masalah kondisi memori yang habis, dan mendapatkan insight tentang penggunaan memori instance: Memantau penggunaan memori instance, Mengelola rasio penggunaan memori sistem.

  4. Pelajari cara menyesuaikan maxmemory saat menjalankan Operasi intensif memori.

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

  6. Pertimbangkan untuk meningkatkan skala 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 dapat membantu Anda menyesuaikan ukuran instance berdasarkan beban kerja Anda:

Menentukan ukuran awal instance Memorystore

Pertama, Anda harus memilih apakah ingin 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 diperlukan:

  1. Tentukan ukuran data Anda.

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

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

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

    • Jika memungkinkan, perkirakan kecepatan penulisan dan ukuran kunci yang akan digunakan aplikasi Anda. Rasio operasi tulis yang dibandingkan dengan tingkat penghapusan kunci akan menentukan seberapa cepat pertumbuhan instance Anda dari waktu ke waktu.
  5. Tingkatkan skala untuk mencapai rasio cache hit yang Anda inginkan

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

Menentukan 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 terjadi masalah pada instance Anda.
  3. Metrik durasi kelebihan memori sistem menunjukkan nilai di atas nol selama periode yang sama ketika Anda mengalami penulisan yang diblokir.

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

Mengelola rasio penggunaan memori sistem

Setel 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 tepat agar instance tidak kehabisan memori. Bergantung pada volume tulis dan pola akses kunci, penggunaan memori sistem berpotensi meningkat hingga 100% dengan cepat. Memorystore menyediakan cara berikut untuk mengelola rasio penggunaan memori sistem:

  • Aktifkan activedefrag untuk instance yang menjalankan Redis versi 4.0 dan yang lebih baru.
  • Turunkan batas maxmemory-gb instance Anda.
  • Tingkatkan skala instance.
  • Pilih kebijakan penghapusan yang sesuai.
  • Menetapkan TTL pada kunci yang tidak stabil.
  • 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 memakan waktu berjam-jam untuk melepaskan memori yang terfragmentasi. Jika traffic operasi tulis tinggi, defragmentasi saja mungkin tidak cukup untuk menghentikan instance Anda kehabisan memori. Oleh karena itu, Anda mungkin perlu menerapkan rekomendasi berikut:

Menurunkan batas memori maksimum instance

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

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

Skenario 2: Rasio penggunaan memori sistem melonjak dengan cepat, dan Anda melihat beban operasi tulis yang signifikan pada instance. Operasi intensif memori mungkin menyebabkan lonjakan. Dalam situasi ini, Anda harus menurunkan batas maxmemory-gb dalam peningkatan yang lebih besar untuk memastikan bahwa instance tidak memasuki kondisi memori habis, atau pulih dari kondisi kehabisan memori. Perlu diperhatikan bahwa menurunkan maxmemory dapat mengurangi rasio cache-hit instance Anda. Rasio cache-hit yang jauh lebih rendah menunjukkan bahwa Anda harus meningkatkan skala instance agar aplikasi Anda dapat memperoleh keuntungan dari penggunaan Redis. Untuk mempelajari cara menyesuaikan konfigurasi maxmemory-gb, lihat Mengonfigurasi instance Redis.

Meningkatkan skala instance

Ikuti petunjuk dalam Menskalakan instance Redis untuk meningkatkan kapasitas instance.

Contoh penskalaan maxmemory:

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

Pilih kebijakan penghapusan yang sesuai

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

Menghapus kunci secara manual dari instance Anda

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