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 - konsep utama yang perlu Anda ketahui untuk membantu menjaga kesehatan instance Memorystore.
Operasi yang intensif memori - operasi yang dapat menyebabkan tekanan memori.
Memantau penggunaan memori instance - metrik yang harus Anda pantau untuk mempelajari cara instance menggunakan memori.
Memecahkan kondisi kehabisan memori - langkah-langkah yang harus dilakukan saat menyelesaikan masalah terkait kondisi kehabisan memori.
Menyesuaikan ukuran instance Memorystore - pelajari cara menyesuaikan ukuran instance, bukan membuat instance yang disediakan secara berlebihan.
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 jumlah yang Anda bayar. 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 tempat kebijakan penghapusan diterapkan. Memorystore for Redis menetapkan konfigurasi ini sebagai
maxmemory-gb
. Saat Anda membuat instance,maxmemory-gb
ditetapkan ke kapasitas instance. Bergantung pada metrik rasio penggunaan memori sistem, Anda mungkin diminta untuk menurunkan batasmaxmemory-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 instance relatif terhadap memori sistem. Memori sistem dikelola secara otomatis oleh Memorystore untuk menangani lonjakan penggunaan memori yang disebabkan oleh operasi yang intensif menggunakan memori dan fragmentasi memori yang umum terjadi di Redis open source.
Jika metrik rasio penggunaan memori sistem melebihi 80%, hal ini menunjukkan bahwa instance berada di bawah tekanan memori dan Anda harus mengikuti petunjuk di Mengelola rasio penggunaan memori sistem. Jika tidak mengambil tindakan dan penggunaan memori terus meningkat, Anda berisiko mengalami error instance karena memori tidak memadai. 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 yang intensif menggunakan memori.
Anda harus memiliki rasio penggunaan memori sistem sebesar 50% atau kurang selama update pemeliharaan. Selain itu, terkadang ekspor 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 meningkat hingga batas konfigurasi
maxmemory-gb
. Jika memori yang digunakan melebihi batasmaxmemory-gb
, kebijakan penghapusan akan diterapkan.
Kebijakan pengusiran
Kebijakan penghapusan instance Anda (juga dikenal sebagai kebijakan maxmemory) menentukan cara Redis menghapus kunci saat data instance Anda mencapai batas
maxmemory-gb
. Redis mengeluarkan kunci sebagai bagian dari kasus penggunaan cache normal. Penghapusan kunci terjadi sebagai proses latar belakang, sehingga kunci tidak langsung dihapus setelah batasmaxmemory-gb
tercapai. Kecepatan tulis yang tinggi dapat melampaui penghapusan kunci yang menyebabkan kondisi kehabisan memori.Kebijakan penghapusan default instance Memorystore adalah
volatile-lru
. Jika Anda menggunakan kebijakan penghapusanvolatile-*
, pastikan Anda menetapkan TTL pada kunci yang ingin Anda hapus masa berlakunya. Jika tidak, Redis tidak akan memiliki kunci untuk dihapus.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 Anda kehabisan memori meskipun
rasio memori yang digunakan terhadap
maxmemory-gb
rendah. Fragmentasi memori terjadi saat sistem operasi mengalokasikan halaman memori yang tidak dapat sepenuhnya digunakan Redis setelah operasi tulis dan hapus berulang. Akumulasi halaman tersebut dapat menyebabkan sistem kehabisan memori dan pada akhirnya menyebabkan server Redis error. Konfigurasi Redisactivedefrag
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 menetapkanactivedefrag
ke "tidak" secara default. Menetapkanactivedefrag
ke "yes" akan mengorbankan 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 yang menggunakan memori secara intensif
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
kunci yang disentuh, memori yang diperlukan untuk ekspor dapat dua kali lipat dari ukuran
ruang yang digunakan 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 Upgrade selama periode beban operasi 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 skalasi atau upgrade gagal karena tekanan memori, Anda harus:
- Kurangi
maxmemory-gb
menjadi 50% dari kapasitas instance Anda sebelum operasi penskalaan/upgrade. Jika memungkinkan, Anda juga harus menurunkan maxmemory selama periode traffic instance yang rendah, karena tindakan ini akan mengurangi dampak negatif penurunan maxmemory terhadap rasio hit cache. - Menskalakan/mengupgrade selama periode operasi tulis rendah.
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 pada waktu saat traffic instance rendah, atau dengan menskalakan ukuran instance 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 di bagian ini. Metrik dan pemberitahuan ini memberi Anda insight tentang penggunaan memori instance. Untuk mempelajari cara melihat metrik dan menetapkan pemberitahuan, lihat Memantau instance Redis.
Metrik Terkait Pengelolaan Memori
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 mencapai batas maxmemory-gb
. Kecuali jika kebijakan penghapusan ditetapkan ke
tidak ada penghapusan, data instance yang mencapai maxmemory tidak selalu
menunjukkan masalah. Namun, penghapusan kunci adalah proses latar belakang yang memerlukan
waktu. Jika memiliki kecepatan tulis yang tinggi, Anda dapat 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 memadai untuk mendukung beban kerja Anda dan operasi yang intensif memori lainnya, Anda harus selalu menyediakan memori sistem yang memadai.
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 dramatis, Anda harus mengaktifkan activedefrag, menurunkan maxmemory, dan mempertimbangkan untuk menskalakan instance.
Setelah rasio penggunaan memori sistem mencapai 100%, setiap operasi 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 beban memori sistem
Jika penggunaan memori Anda terlalu tinggi, Memorystore akan memblokir penulisan ke instance Anda agar instance tetap sehat. Durasi kelebihan beban memori sistem melacak berapa lama instance Anda berada dalam status penulisan yang diblokir.
Anda harus Menetapkan pemberitahuan
untuk metrik ini agar mengetahui kapan operasi tulis diblokir untuk instance Anda. Selain itu, Anda dapat melihat kembali metrik ini untuk memecahkan masalah saat menerima error -OOM command not allowed under OOM prevention.
.
Rasio cache ditemukan
Anda harus memantau rasio hit cache secara rutin agar mengetahui persentase pencarian kunci yang berhasil ditampilkan oleh kunci di instance Redis. Secara umum, rasio hit cache yang lebih tinggi lebih baik daripada
rasio hit cache yang lebih rendah. Anda harus mencatat rasio hit cache sebelum membuat
perubahan konfigurasi besar seperti menyesuaikan batas maxmemory-gb
, mengubah kebijakan penghapusan, 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 berakhir
Metrik Stackdriver kunci yang dapat habis masa berlakunya memantau jumlah kunci yang ditetapkan untuk masa berlaku habis. Jika tidak ada kunci yang dapat berakhir 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 dihapus yang dapat menyebabkan kondisi
kehabisan memori jika Anda menggunakan kebijakan penghapusan volatile-*
.
Metrik lain yang dapat Anda pantau adalah kunci yang sudah tidak berlaku. Jika metrik menampilkan banyak
kunci yang sudah tidak berlaku, tetapi Anda masih melihat tekanan memori pada instance, Anda harus
menurunkan maxmemory-gb
.
Menyelesaikan kondisi kehabisan memori
Berikut adalah beberapa praktik terbaik yang harus Anda ikuti jika instance mengalami tekanan memori atau mengalami error kehabisan memori.
Jika Anda menggunakan kebijakan penghapusan
volatile-*
, pastikan Anda menetapkan TTL pada kunci yang ingin Anda hapus masa berlakunya. Lihat Kebijakan pengusiran untuk mengetahui detail selengkapnya.Untuk instance yang menjalankan Redis 4.0 dan yang lebih baru:
- Aktifkan
activedefrag
untuk instance Anda. Lihat Defragmentasi aktif untuk mengetahui detail selengkapnya.
- Aktifkan
Pelajari cara menggunakan metrik untuk memecahkan masalah kondisi kehabisan memori, dan dapatkan insight tentang penggunaan memori instance Anda: Memantau penggunaan memori instance, Mengelola rasio penggunaan memori sistem.
Pelajari cara menyesuaikan maxmemory saat menjalankan Operasi yang membutuhkan banyak memori.
Jika metrik rasio penggunaan memori sistem melebihi 80%, kurangi batas
maxmemory-gb
instance Anda. Lihat Mengelola rasio penggunaan memori sistem untuk mengetahui detail selengkapnya.Pertimbangkan untuk meningkatkan kapasitas instance.
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 berdasarkan workload:
- Menentukan ukuran awal instance Memorystore menjelaskan cara memperkirakan ukuran instance sebelum membuatnya.
- Memantau penggunaan memori instance menguraikan metrik yang memberikan informasi bermanfaat terkait cara instance Anda menggunakan memori.
- Mengelola rasio penggunaan memori sistem menjelaskan tindakan yang harus dilakukan jika rasio penggunaan memori sistem melebihi 80%.
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 Anda perlukan:
Tentukan ukuran data Anda.
- Estimasi jumlah kunci, dan ukuran kunci rata-rata, yang akan ditulis aplikasi Anda ke instance Redis. Kalikan nilai ini untuk mendapatkan perkiraan kasar ukuran instance yang Anda butuhkan.
Pilih kebijakan penghapusan.
- Jika Anda menggunakan kebijakan maxmemory
noeviction
, ukuran instance harus cukup besar untuk menampung beban kerja dan set kerja 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.
- Jika Anda menggunakan kebijakan maxmemory
Menyediakan memori tambahan untuk instance Paket Standar
- Tidak seperti instance Tingkat Dasar, instance Tingkat Standar mencadangkan 10% kapasitas instance sebagai buffering replikasi. Jika Anda memilih instance Tingkat Standar, pastikan Anda mengambil estimasi data dari langkah pertama dan menyediakan tambahan 10% untuk buffering replika.
Memperkirakan kecepatan tulis rata-rata dan puncak
- Jika memungkinkan, estimasi kecepatan tulis, dan ukuran kunci yang akan digunakan aplikasi Anda. Rasio tulis dibandingkan dengan rasio penghapusan kunci menentukan seberapa cepat instance Anda akan tumbuh dari waktu ke waktu.
Meningkatkan 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, artinya Anda perlu meningkatkan ukuran instance, atau memastikan bahwa aplikasi Anda menulis kunci ke instance Memorystore yang diminta, dan tidak dipenuhi.
Menentukan apakah instance Anda memblokir operasi tulis karena kondisi kehabisan memori
Jika Anda mendapatkan error berikut:
-OOM command not allowed under OOM prevention.
Kemudian, periksa apakah:
- Metrik rasio penggunaan memori sistem melebihi 80% tepat sebelum instance Anda mulai mengalami masalah.
- Rasio penggunaan memori sistem meningkat sangat cepat sebelum masalah dengan instance Anda terjadi.
- Metrik durasi kelebihan beban memori sistem menampilkan nilai di atas nol selama periode yang sama saat Anda mengalami penulisan yang diblokir.
Jika demikian, hal ini mungkin menunjukkan bahwa instance memblokir operasi tulis 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 operasi 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. - Meningkatkan skala instance.
- Pilih kebijakan penghapusan yang sesuai.
- Menetapkan TTL pada kunci yang tidak stabil.
- Menghapus kunci secara manual dari instance Anda.
Mengaktifkan 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 tulis tinggi, defragmentasi saja mungkin tidak
cukup untuk mencegah instance 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
lihat terlebih dahulu 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 merupakan masalah, dan Anda harus menurunkan maxmemory-gb
dalam
tambahan kecil hingga rasio penggunaan memori sistem stabil di bawah 80%.
Skenario 2: Rasio penggunaan memori sistem melonjak dengan cepat, dan Anda melihat beban tulis yang signifikan pada instance. Operasi yang menguras memori
mungkin menyebabkan lonjakan. Dalam situasi ini, Anda harus menurunkan batas maxmemory-gb
dalam penambahan yang lebih besar untuk memastikan bahwa instance tidak memasuki
kondisi kehabisan memori, atau pulih dari kondisi kehabisan memori.
Perlu diperhatikan 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 dapat memperoleh keuntungan dari penggunaan 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 memiliki instance 10 GB dengan maxmemory-gb
ditetapkan ke 8 GB, Anda memiliki 8 GB untuk
menyimpan kunci dan overhead memori 2 GB. Jika Anda menskalakan instance menjadi 20 GB,
maxmemory-gb
akan diskalakan menjadi 16 GB. Oleh karena itu, instance Anda sekarang memiliki memori sebesar 16 GB
untuk menyimpan kunci, dan overhead sebesar 4 GB.
Lihat Menskalakan instance Redis untuk mengetahui
petunjuk cara meningkatkan atau mengurangi ukuran instance.
Memilih kebijakan penghapusan yang sesuai
Jika Anda menyimpan data yang tidak stabil, pilih salah satu kebijakan penghapusan volatile-*
.
Jika Anda menyimpan data yang tidak tidak stabil, pilih salah satu kebijakan
allkeys-*
.
Menghapus kunci dari instance secara manual
Anda dapat memperbaiki kondisi kehabisan memori dengan menghapus kunci dari instance secara manual. Ini adalah solusi sementara yang membantu Anda meningkatkan kesehatan instance.