Gunakan referensi ini untuk mengidentifikasi akar penyebab event latency Redis dan menerapkan perbaikan yang sesuai.
Sebelum Anda mulai
Periksa penyebab umum berikut sebelum menyelidiki event spesifik:
Perintah lambat. Perintah yang memindai semua kunci (misalnya,
KEYS) memblokir thread utama. Tinjau log kueri lambat untuk menemukannya. Lihat Kueri log kueri lambat.Kunci besar. Kunci besar memperlambat proses penggantian (eviction) dan kedaluwarsa (expiration). Gunakan analisis kunci offline untuk mengidentifikasinya. Lihat Gunakan fitur analisis kunci offline.
Penggunaan memori tinggi. Saat memori yang terpakai melebihi batas
maxmemory, siklus eviction berjalan secara sering. Lihat Ubah konfigurasi instans.
Latar Belakang
Redis 2.8.13 memperkenalkan pemantauan latency, yang mengumpulkan data dari 160 detik terakhir dan hanya mencatat event dengan latency tertinggi setiap detik.
Tair (Redis OSS-compatible) menyediakan latency insights, alternatif lanjutan yang mencatat hingga 27 event beserta durasi eksekusi semua perintah serta menyimpan statistik latency selama tiga hari terakhir. Untuk nama event dan ambang batas latency-nya, lihat Event khusus umum.
Event latency umum
Beberapa event memiliki hubungan induk-anak:
AofWriteadalah event induk. Setiap kali data ditulis ke file hanya-tambah (append-only file/AOF), Redis mencatatAofWritebersamaan dengan tepat satu dari tiga event anak:AofWriteAlone,AofWriteActiveChild, atauAofWritePendingFsync. Untuk menemukan penyebab spesifik, analisis event anak tersebut.EvictionCycleadalah event induk untuk proses eviction. AnalisisEvictionDeldanEvictionLazyFreesecara bersamaan untuk menentukan faktor yang menyebabkan latency pada proses eviction.
| Event | Apa yang diukur | Penyebab umum | Yang harus dilakukan |
|---|---|---|---|
EvictionCycle | Waktu untuk satu siklus eviction penuh, termasuk pemilihan kunci, penghapusan, dan penantian thread latar belakang | Berbagai faktor — analisis EvictionDel dan EvictionLazyFree untuk mengidentifikasi penyebabnya | Tinjau penggunaan kunci dan optimalkan data bisnis. Jika eviction terjadi secara sering, tingkatkan kapasitas instans agar penggunaan memori tetap di bawah batas maxmemory. |
EvictionDel | Waktu untuk menghapus kunci selama siklus eviction | Kunci besar sedang diganti (evicted) | Hindari kunci besar. Aktifkan eviction asinkron dengan mengatur lazyfree-lazy-eviction ke yes. Jika eviction terjadi secara sering, tingkatkan kapasitas instans. |
EvictionLazyFree | Waktu menunggu thread latar belakang melepaskan memori | Tidak ada kunci yang dapat diganti saat thread latar belakang sedang membebaskan memori (misalnya, saat menghapus kunci besar) | Sesuaikan kebijakan eviction memori menggunakan parameter maxmemory-policy. Jika eviction terjadi secara sering, tingkatkan kapasitas instans. |
ExpireCycle | Waktu untuk satu siklus kedaluwarsa kunci | Kunci besar sedang dihapus | Hindari kunci besar. Aktifkan expiration asinkron dengan mengatur lazyfree-lazy-expire ke yes. Bersihkan data yang telah kedaluwarsa secara berkala di Konsol. |
ExpireDel | Waktu untuk menghapus kunci selama siklus kedaluwarsa | Kunci besar sedang dihapus | Hindari kunci besar. |
AofWrite | Total waktu untuk menulis data ke AOF | Berbagai faktor — analisis AofWriteAlone, AofWriteActiveChild, dan AofWritePendingFsync untuk mengidentifikasi penyebabnya | Jika persistensi data tidak diperlukan, nonaktifkan AOF dengan mengatur appendonly ke no. |
AofWriteAlone | Waktu untuk penulisan AOF tanpa proses anak konkuren atau fsync tertunda | Volume tulis besar atau bottleneck performa disk | Jika AOF tidak diperlukan, atur appendonly ke no. |
AofWriteActiveChild | Waktu untuk penulisan AOF saat proses anak juga sedang menulis ke disk | I/O disk proses anak bersaing dengan penulisan AOF | Jika AOF tidak diperlukan, atur appendonly ke no. |
AofWritePendingFsync | Waktu untuk penulisan AOF saat fsync latar belakang sedang berlangsung | fsync latar belakang bersaing dengan penulisan AOF | Jika AOF tidak diperlukan, atur appendonly ke no. |
Commands | Waktu untuk perintah reguler (tidak dikategorikan sebagai fast) | Perintah yang melakukan traversal seluruh data, seperti KEYS | Tinjau log kueri lambat untuk menemukan perintah yang berjalan lama. Gunakan analisis kunci offline untuk memeriksa adanya kunci besar. |
FastCommand | Waktu untuk perintah cepat dengan kompleksitas O(1) atau O(log N) | Perintah cepat yang menyalin volume data besar (misalnya, GET pada kunci besar) | Identifikasi dan lakukan pemisahan kunci besar. Lihat Identifikasi dan tangani kunci besar dan hotkey. |
Fork | Waktu untuk memanggil fork() | Penulisan ulang AOF (AOF rewrites) | Jika persistensi data tidak diperlukan, nonaktifkan AOF dengan mengatur appendonly ke no. |