Penyimpanan sementara kumpulan hasil

Perhatian

Fitur penyimpanan sementara kumpulan hasil dinonaktifkan saat ini di Fabric Data Warehouse. Untuk informasi selengkapnya, lihat Masalah Umum Gudang Data Fabric.

Penyimpanan sementara set hasil adalah pengoptimalan performa bawaan untuk endpoint analitik Fabric Data Warehouse dan Lakehouse SQL yang mengurangi latensi baca.

Cache hasil tataan berfungsi dengan menyimpan tataan hasil akhir untuk kueri T-SQL yang berlaku SELECT, sehingga eksekusi berikutnya yang "tercache" hanya akan memproses kumpulan hasil akhir. Ini dapat melewati kompilasi kompleks dan pemrosesan data kueri asli dan mengembalikan kueri berikutnya lebih cepat.

Skenario pergudangan data biasanya melibatkan kueri analitis yang memproses data dalam jumlah besar untuk menghasilkan hasil yang relatif kecil. Misalnya, SELECT kueri yang berisi beberapa gabungan dan melakukan pembacaan dan pengacakan pada jutaan baris data dapat mengakibatkan agregasi yang panjangnya hanya beberapa baris. Untuk beban kerja seperti laporan atau dasbor yang cenderung memicu kueri analitik yang sama berulang kali, komputasi berat yang sama dapat dipicu beberapa kali, meskipun hasil akhirnya tetap sama. Penggunaan cache data hasil meningkatkan performa dalam skenario ini dan serupa untuk biaya yang kurang lebih sama.

Manajemen cache otomatis

Cache tataan hasil bekerja secara transparan. Setelah fitur ini diaktifkan, pembuatan dan penggunaan kembali cache dilakukan secara oportunistik pada kueri.

Penyimpanan sementara tataan hasil berlaku untuk kueri T-SQL pada tabel gudang, pintasan ke sumber OneLake, dan pintasan ke sumber non-Azure. Manajemen cache ditangani secara otomatis, secara teratur mengeluarkan cache sesuai kebutuhan.

Selain itu, saat data Anda berubah, konsistensi hasil dipastikan dengan membatalkan cache yang dibuat sebelumnya.

Mengonfigurasi cache setelan hasil

Pengaturan cache kumpulan hasil dapat dikonfigurasi di tingkat item, dan diaktifkan secara default untuk semua Gudang Fabric dan Endpoint Lakehouse SQL Analytics.

Setelah diaktifkan, kemudian dapat dinonaktifkan di tingkat item atau untuk kueri individual, jika diperlukan.

Konfigurasi tingkat item

Nilai pengaturan dapat diperiksa di sys.databases, misalnya untuk melihat nilai untuk konteks saat ini di Fabric Warehouse atau titik akhir analitik Lakehouse SQL:

SELECT name, is_result_set_caching_on 
FROM sys.databases
WHERE database_id = db_id();

Untuk menonaktifkan penyimpanan sementara set hasil:

ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING OFF;

Konfigurasi tingkat kueri

Setelah penyimpanan sementara set hasil diaktifkan pada item, penyimpanan sementara dapat dinonaktifkan untuk kueri individual.

Ini dapat berguna untuk debug atau pengujian A/B. Nonaktifkan penyimpanan sementara kumpulan hasil untuk perintah dengan melampirkan petunjuk ini di akhir SELECT.

OPTION ( USE HINT ('DISABLE_RESULT_SET_CACHE') );

Periksa penggunaan cache kumpulan hasil

Penggunaan cache set hasil dapat diperiksa di dua lokasi: Output Pesan dan tampilan sistem queryinsights.exec_requests_history.

Dalam output pesan kueri (terlihat di editor Fabric Query atau SQL Server Management Studio), pernyataan "Cache kumpulan hasil digunakan" akan ditampilkan setelah eksekusi kueri jika kueri dapat menggunakan cache tataan hasil yang ada.

Cuplikan layar dari hasil kueri yang menunjukkan bahwa cache set hasil digunakan.

Dalam queryinsights.exec_requests_history, kolom result_cache_hit menampilkan nilai yang menunjukkan penggunaan cache tataan hasil untuk setiap eksekusi kueri:

  • 2: kueri menggunakan cache set hasil (cache hit)
  • 1: kueri membuat cache tataan hasil
  • 0: kueri tidak berlaku untuk pembuatan atau penggunaan cache tataan hasil

Contohnya:

SELECT result_cache_hit, command, *
FROM queryinsights.exec_requests_history
ORDER BY submit_time DESC;

Cuplikan layar dari editor kueri Fabric memperlihatkan kueri pada tampilan queryinsights.exec_requests_history.

Memenuhi syarat untuk penggunaan cache set hasil

Saat kueri SELECT dikeluarkan, kueri dinilai untuk penggunaan cache kumpulan hasil. Berbagai persyaratan harus dipenuhi agar memenuhi syarat untuk membuat dan menggunakan cache tataan hasil. Beberapa mekanisme ini membantu menjaga penyimpanan cache tetap berada di bawah batas internal, sebagian mencadangkan cache untuk kueri yang kompleks, dan lainnya mempertahankan akurasi hasil saat "hit" terjadi berulang kali. Contoh yang jelas adalah membatasi SELECT kueri agar GETDATE() hasilnya dari di-cache, tetapi ada juga kasus yang lebih rumit di mana Fabric memutuskan untuk tidak menyimpan hasil.

Daftar berikut berisi pengecualian umum untuk cache kumpulan hasil pada Fabric Data Warehouse. Jika Anda menemukan kueri tidak berlaku untuk membuat cache tataan hasil, itu bisa disebabkan oleh satu atau beberapa alasan berikut:

  • Penembolokan tataan hasil tidak diaktifkan pada item yang saat ini tersambung, atau diaktifkan pada item tetapi kueri menyertakan DISABLE_RESULT_SET_CACHE petunjuk
  • Kueri bukan murni SELECT, misalnya, CREATE TABLE AS SELECT (CTAS), SELECT-INTO, Bahasa Modifikasi Data lainnya
  • Kueri mereferensikan objek sistem, tabel sementara, fungsi metadata, atau tidak mereferensikan objek terdistribusi apa pun
  • Kueri tidak mereferensikan setidaknya satu tabel minimal 100.000 baris
  • Kueri mereferensikan objek di luar item Fabric yang saat ini tersambung (misalnya, kueri lintas database)
  • Kueri berada di dalam transaksi eksplisit atau perulangan WHILE
  • Output kueri berisi tipe data yang tidak didukung dan/atau VARCHAR(MAX) tipe data dan/atau VARBINARY(MAX) jenis data. Untuk jenis data yang didukung, lihat Jenis data di Fabric Data Warehouse
  • Kueri berisi CAST atau CONVERT yang memiliki beberapa referensi ke tipe data tanggal atau sql_variant
  • Kueri berisi konstanta runtime (seperti CURRENT_USER atau GETDATE())
  • Hasil kueri diperkirakan > 10.000 baris
  • Kueri berisi fungsi bawaan non-deterministik, fungsi agregat jendela, atau fungsi yang diurutkan seperti PARTITION BY … ORDER BY. Lihat Fungsi Deterministik dan Nondeterministik.
  • Kueri menggunakan masking data dinamis, keamanan tingkat baris, atau fitur keamanan lainnya
  • Kueri menggunakan perjalanan waktu
  • Kueri menerapkan ORDER BY pada kolom atau ekspresi yang tidak disertakan dalam output kueri
  • Kueri berada dalam sesi yang memiliki pernyataan tingkat SET sesi dengan nilai non-default (misalnya, pengaturan QUOTED_IDENTIFIER ke OFF)
  • Sistem mencapai batas internal untuk cache. Proses pengeluaran cache latar belakang akan mengosongkan ruang sebelum cache baru dibuat.

Aturan ini juga berlaku untuk menggunakan kembali cache pada eksekusi berikutnya dari kueri yang sama. Selain itu, cache mungkin tidak digunakan dalam skenario berikut:

  • Setiap perubahan pada tabel yang direferensikan sejak cache dibuat
  • Ruang kerja menjadi offline sejak pembuatan cache, mirip dengan penyimpanan sementara di memori dan disk
  • Pengguna tidak memiliki izin yang memadai untuk objek dalam kueri
  • Kueri sedang dipanggil dari koneksi lakehouse atau gudang yang berbeda dari tempat kueri asli dikeluarkan. (Kueri lintas database tidak dapat menggunakan penyimpanan cache untuk kumpulan hasil.)
  • Kueri menggunakan kolom output, urutan kolom, atau alias yang berbeda dari kueri asli
  • Kueri yang di-cache belum digunakan dalam 24 jam

Nota

Karena kualifikasi ini dinilai secara internal untuk aplikasi penembolokan kumpulan hasil terbaik, penting untuk diingat bahwa mereka dapat diperbarui di masa depan.