Cache hasil kueri
Berlaku untuk: ✅Microsoft Fabric✅✅
Kusto menyertakan cache hasil kueri. Anda dapat memilih untuk mendapatkan hasil cache saat menerbitkan kueri. Anda akan mendapatkan performa kueri yang lebih baik dan konsumsi sumber daya yang lebih rendah jika hasil kueri Anda dapat ditampilkan oleh cache. Namun, performa ini menimbulkan beberapa "kedaluwarsa" dalam hasil.
Menggunakan cache
Atur opsi query_results_cache_max_age
sebagai bagian kueri untuk menggunakan cache hasil kueri. Anda dapat mengatur opsi ini dalam teks kueri atau sebagai properti permintaan klien. Contohnya:
set query_results_cache_max_age = time(5m);
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id
Nilai opsi adalah timespan
yang menunjukkan "usia" maksimum cache hasil, yang diukur sejak waktu mulai kueri. Di luar rentang waktu yang ditetapkan, entri cache sudah usang dan tidak akan lagi digunakan. Mengatur nilai 0 setara dengan tidak mengatur opsi.
Kompatibilitas antarkueri
Kueri yang identik
Cache hasil kueri hanya menampilkan hasil untuk kueri yang dianggap "identik" dengan kueri cache sebelumnya. Dua kueri dianggap identik jika semua syarat berikut terpenuhi:
- Dua kueri tersebut memiliki representasi yang sama (seperti string UTF-8).
- Dua kueri tersebut dibuat ke database yang sama.
- Dua kueri tersebut berbagi properti permintaan klien yang sama. Properti berikut diabaikan untuk tujuan penembolokan:
- ClientRequestId
- Aplikasi
- Pengguna
Kueri yang tidak kompatibel
Hasil kueri tidak akan di-cache jika salah satu kondisi berikut ini benar:
- Kueri tersebut mereferensikan tabel yang mengaktifkan kebijakan RestrictedViewAccess.
- Kueri tersebut mereferensikan tabel yang mengaktifkan kebijakan RowLevelSecurity.
- Kueri menggunakan salah satu fungsi berikut:
- Kueri tersebut mengakses tabel eksternal atau data eksternal.
- Kueri tersebut menggunakan operator plugin evaluasi.
Tidak ada entri cache yang valid
Jika hasil cache yang memenuhi batasan waktu tidak dapat ditemukan, atau tidak ada hasil cache dari kueri "identik" dalam cache, kueri tersebut akan dieksekusi dan hasilnya di-cache, asalkan:
- Eksekusi kueri tersebut berhasil diselesaikan, dan
- Ukuran hasil kueri tersebut tidak melebihi 16 MB.
Hasil dari cache
Bagaimana layanan menunjukkan bahwa hasil kueri sedang dilayani dari cache?
Saat merespons kueri, Kusto mengirimkan tabel respons ExtendedProperties lain yang menyertakan kolom Key
dan kolom Value
.
Hasil kueri yang di-cache akan memiliki baris lain yang ditambahkan ke tabel tersebut:
- Kolom baris
Key
akan berisi stringServerCache
- Kolom baris
Value
akan berisi tas properti dengan dua bidang:-
OriginalClientRequestId
- Menentukan ClientRequestId permintaan asli. -
OriginalStartedOn
- Menentukan waktu mulai eksekusi permintaan asli.
-
Konsistensi kueri
Kueri yang menggunakan konsistensi lemah dapat diproses pada node kluster yang berbeda. Cache tidak dibagikan oleh node kluster, setiap simpul memiliki cache khusus di penyimpanan privatnya sendiri. Oleh karena itu, jika dua kueri yang identik mendarat di node yang berbeda, kueri akan dijalankan dan di-cache pada kedua simpul. Dengan mengatur konsistensi kueri ke affinitizedweakconsistency
, Anda dapat memastikan bahwa kueri konsistensi lemah yang merupakan lahan identik pada kepala kueri yang sama, dan dengan demikian meningkatkan tingkat hit cache. Ini tidak relevan saat menggunakan konsistensi yang kuat.
Manajemen
Perintah manajemen dan ketersediaan berikut didukung:
- Perlihatkan cache hasil kueri: Mengembalikan statistik yang terkait dengan cache hasil kueri.
- Hapus cache hasil kueri: Menghapus cache hasil kueri.
- Entri cache kueri refresh: entri cache kueri tertentu dapat disegarkan menggunakan
query_results_cache_force_refresh
properti permintaan klien (OptionQueryResultsCacheForceRefresh). Ketika diatur ketrue
, perintah ini akan memaksa cache hasil kueri untuk disegarkan juga ketika terdapat cache yang sudah ada. Proses ini berguna dalam skenario yang mengharuskan hasil kueri tersedia untuk pembuatan kueri. Properti ini harus digunakan dalam kombinasi dengan 'query_results_cache_max_age', dan dikirim melalui objek ClientRequestProperties. Properti tidak dapat menjadi bagian dari pernyataan 'set'.
Kapasitas
Kapasitas cache saat ini ditetapkan sebesar 1 GB per node kluster. Kebijakan pengeluaran adalah LRU.
Cache hasil kueri tingkat shard
Anda dapat menggunakan cache hasil kueri tingkat shard untuk skenario yang memerlukan hasil terbaru, seperti dasbor langsung. Misalnya, kueri yang berjalan setiap 10 detik dan mencakup 1 jam terakhir dapat memperoleh manfaat dari penembolokan hasil kueri perantara di tingkat (shard) penyimpanan.
Cache hasil kueri tingkat shard diaktifkan secara otomatis saat Query results cache
sedang digunakan. Karena berbagi cache yang sama dengan Query results cache
, kapasitas yang sama dan kebijakan pengeluaran berlaku.
Sintaks
set
query_results_cache_per_shard
; Kueri
Catatan
Opsi ini dapat diatur dalam teks kueri atau sebagai properti permintaan klien.
Pelajari selengkapnya tentang konvensi sintaksis.
Contoh
set query_results_cache_per_shard;
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id