Bagikan melalui


Cache hasil kueri

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.

Gunakan 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:

Kueri yang tidak kompatibel

Hasil kueri tidak akan di-cache jika salah satu kondisi berikut ini benar:

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 string ServerCache
  • Kolom baris Value akan berisi tas properti dengan dua bidang:
    • OriginalClientRequestId - Menentukan ClientRequestId permintaan asli.
    • OriginalStartedOn - Menentukan waktu mulai eksekusi permintaan asli.

Distribusi

Cache tidak dibagikan oleh node kluster. Setiap node memiliki cache khusus dalam penyimpanan pribadinya sendiri. Jika dua kueri identik berada di node yang berbeda, kueri akan dieksekusi dan di-cache di kedua node. Proses ini dapat terjadi jika konsistensi lemah digunakan. Dengan mengatur konsistensi kueri ke affinitizedweakconsistency, Anda dapat membuat kueri konsistensi lemah yang identik masuk di kepala kueri yang sama, dan dengan demikian meningkatkan tingkat hit singgahan.

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_refreshproperti permintaan klien (OptionQueryResultsCacheForceRefresh). Ketika diatur ke true, 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

Cache hasil kueri efektif jika kueri yang sama dijalankan beberapa kali berturut-turut dengan cepat dan dapat menoleransi penampilan data yang sedikit lawas. Namun, beberapa skenario, seperti dasbor langsung, memerlukan hasil terbaru.

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

setquery_results_cache_per_shard; Query

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