PenggusuranCompatible with Milvus 2.6.4+
Eviction mengelola sumber daya cache dari setiap QueryNode di Milvus. Ketika diaktifkan, fitur ini secara otomatis menghapus data yang ditembolok setelah ambang batas sumber daya tercapai, memastikan kinerja yang stabil dan mencegah kehabisan memori atau disk.
Penggusuran menggunakan kebijakan Least Recently Used (LRU ) untuk mendapatkan kembali ruang cache. Metadata selalu di-cache dan tidak pernah digusur, karena metadata sangat penting untuk perencanaan kueri dan biasanya berukuran kecil.
Penggusuran harus diaktifkan secara eksplisit. Tanpa konfigurasi, data yang ditembolok akan terus terakumulasi hingga sumber daya habis.
Jenis penggusuran
Milvus mendukung dua mode penggusuran yang saling melengkapi(sinkronisasi dan asinkronisasi) yang bekerja bersama untuk manajemen sumber daya yang optimal:
Aspek |
Penggusuran Sinkronisasi |
Penggusuran Asinkron |
|---|---|---|
Pemicu |
Terjadi selama kueri atau pencarian ketika penggunaan memori atau disk melebihi batas internal. |
Dipicu oleh thread latar belakang saat penggunaan melebihi batas tinggi atau saat data yang di-cache mencapai time-to-live (TTL). |
Perilaku |
Operasi kueri atau pencarian berhenti sementara saat QueryNode mendapatkan kembali ruang cache. Penggusuran berlanjut hingga penggunaan turun di bawah watermark rendah atau terjadi timeout. Jika batas waktu tercapai dan data tidak mencukupi untuk diambil kembali, kueri atau pencarian mungkin gagal. |
Berjalan secara berkala di latar belakang, secara proaktif mengusir data yang ditembolok ketika penggunaan melebihi tanda air tinggi atau ketika data kedaluwarsa berdasarkan TTL. Pengusiran berlanjut hingga penggunaan turun di bawah tanda air rendah. Kueri tidak diblokir. |
Paling cocok untuk |
Beban kerja yang dapat mentoleransi lonjakan latensi singkat atau jeda sementara selama penggunaan puncak. Berguna ketika penggusuran asinkronisasi tidak dapat mendapatkan kembali ruang dengan cukup cepat. |
Beban kerja yang sensitif terhadap latensi yang membutuhkan kinerja kueri yang lancar dan dapat diprediksi. Ideal untuk manajemen sumber daya yang proaktif. |
Perhatian |
Dapat menyebabkan penundaan kueri singkat atau waktu habis jika data yang dapat digusur tidak mencukupi. |
Membutuhkan pengaturan tanda air tinggi/rendah dan TTL yang disetel dengan benar. Sedikit overhead dari utas latar belakang. |
Konfigurasi |
Diaktifkan melalui |
Diaktifkan melalui |
Penyiapan yangdisarankan:
Kedua mode penggusuran dapat diaktifkan bersamaan untuk keseimbangan optimal, asalkan beban kerja Anda mendapat manfaat dari Penyimpanan Berjenjang dan dapat mentolerir latensi pengambilan terkait penggusuran.
Untuk pengujian performa atau skenario yang sangat penting, pertimbangkan untuk menonaktifkan penggusuran sepenuhnya untuk menghindari overhead pengambilan jaringan setelah penggusuran.
Untuk bidang dan indeks yang dapat digusur, unit penggusuran sesuai dengan perincian pemuatan-bidang skalar/vektor digusur berdasarkan potongan, dan indeks skalar/vektor digusur berdasarkan segmen.
Mengaktifkan penggusuran
Konfigurasikan penggusuran di bawah queryNode.segcore.tieredStorage di milvus.yaml:
queryNode:
segcore:
tieredStorage:
evictionEnabled: true # Enables synchronous eviction
backgroundEvictionEnabled: true # Enables background (asynchronous) eviction
Parameter |
Jenis |
Nilai |
Deskripsi |
Kasus penggunaan yang disarankan |
|---|---|---|---|---|
|
bool |
|
Sakelar utama untuk strategi penggusuran. Default ke |
Selalu setel ke |
|
bool |
|
Menjalankan penggusuran secara asinkron di latar belakang. Memerlukan |
Gunakan |
Mengonfigurasi tanda air
Tanda air menentukan kapan penggusuran cache dimulai dan diakhiri untuk memori dan disk. Setiap jenis sumber daya memiliki dua ambang batas:
Tanda air tinggi: Penggusuran dimulai saat penggunaan melebihi nilai ini.
Tanda air rendah: Penggusuran berlanjut hingga penggunaan turun di bawah nilai ini.
Konfigurasi ini hanya berlaku ketika penggusuran diaktifkan.
Contoh YAML:
queryNode:
segcore:
tieredStorage:
# Memory watermarks
memoryLowWatermarkRatio: 0.75 # Eviction stops below 75% memory usage
memoryHighWatermarkRatio: 0.8 # Eviction starts above 80% memory usage
# Disk watermarks
diskLowWatermarkRatio: 0.75 # Eviction stops below 75% disk usage
diskHighWatermarkRatio: 0.8 # Eviction starts above 80% disk usage
Parameter |
Jenis |
Rentang |
Deskripsi |
Kasus penggunaan yang disarankan |
|---|---|---|---|---|
|
mengambang |
(0.0, 1.0] |
Tingkat penggunaan memori di mana penggusuran berhenti. |
Mulai dari |
|
float |
(0.0, 1.0] |
Tingkat penggunaan memori di mana penggusuran asinkron dimulai. |
Mulai dari |
|
mengambang |
(0.0, 1.0] |
Tingkat penggunaan disk di mana penggusuran berhenti. |
Mulai dari |
|
float |
(0.0, 1.0] |
Tingkat penggunaan disk di mana penggusuran asinkron dimulai. |
Mulai di |
Praktik terbaik:
Jangan menetapkan watermark tinggi atau rendah di atas ~0,80 untuk menyisakan ruang untuk penggunaan statis QueryNode dan ledakan waktu kueri.
Hindari kesenjangan yang besar antara watermark tinggi dan rendah; kesenjangan yang besar akan memperpanjang setiap siklus penggusuran dan dapat menambah latensi.
Mengonfigurasi TTL cache
Cache Time-to-Live (TTL) secara otomatis menghapus data yang ditembolok setelah durasi yang ditetapkan, meskipun ambang batas sumber daya tidak tercapai. TTL bekerja bersama penggusuran LRU untuk mencegah data yang sudah basi menempati cache tanpa batas waktu.
Cache TTL membutuhkan backgroundEvictionEnabled: true, karena berjalan pada thread latar belakang yang sama.
Contoh YAML:
queryNode:
segcore:
tieredStorage:
evictionEnabled: true
backgroundEvictionEnabled: true
# Set the cache expiration time to 604,800 seconds (7 days),
# and expired caches will be cleaned up by a background thread.
cacheTtl: 604800
Parameter |
Tipe |
Satuan |
Deskripsi |
Kasus penggunaan yang disarankan |
|---|---|---|---|---|
|
bilangan bulat |
detik |
Durasi sebelum data yang di-cache kedaluwarsa. Item yang kedaluwarsa akan dihapus di latar belakang. |
Gunakan TTL pendek (jam) untuk data yang sangat dinamis; gunakan TTL panjang (hari) untuk kumpulan data yang stabil. Tetapkan 0 untuk menonaktifkan kedaluwarsa berbasis waktu. |