Penyetelan performa dengan penyimpanan sementara set hasil

Saat caching kumpulan hasil diaktifkan, SQL pool khusus secara otomatis menyimpan hasil kueri dalam database pengguna untuk pemakaian ulang. Ini memungkinkan eksekusi kueri berikutnya untuk mendapatkan hasil langsung dari cache yang dipertahankan sehingga komputasi ulang tidak diperlukan. Penembolokan kumpulan hasil meningkatkan performa kueri dan mengurangi penggunaan sumber daya komputasi. Selain itu, kueri yang menggunakan kumpulan hasil yang di-cache tidak menggunakan slot konkurensi apa pun dan dengan demikian tidak dihitung terhadap batas konkurensi yang ada. Untuk keamanan, pengguna hanya dapat mengakses hasil cache jika mereka memiliki izin akses data yang sama dengan pengguna yang membuat hasil cache. Penggunaan cache set hasil mati secara default pada tingkat database dan sesi.

Nota

Penembolokan set hasil tidak boleh digunakan bersama dengan DECRYPTBYKEY. Jika fungsi kriptografi ini harus digunakan, pastikan Anda menonaktifkan cache set hasil (baik di tingkat sesi atau tingkat basis data) pada saat eksekusi.

Perintah kunci

Aktifkan/Nonaktifkan penyimpanan cache hasil untuk database pengguna

Aktifkan/nonaktifkan penyimpanan set hasil untuk sesi

Periksa ukuran tataan hasil yang di-cache

Bersihkan cache

Apa yang tidak di-cache

Setelah penyimpanan hasil query diaktifkan untuk database, hasil di-cache untuk semua kueri sampai cache mencapai kapasitas maksimum, kecuali untuk kueri-kueri berikut:

  • Kueri dengan fungsi bawaan atau ekspresi runtime yang tidak deterministik bahkan ketika tidak ada perubahan dalam data atau kueri tabel dasar. Misalnya, DateTime.Now(), GetDate().
  • Kueri menggunakan fungsi yang didefinisikan oleh pengguna
  • Kueri menggunakan tabel dengan keamanan tingkat baris
  • Kueri yang mengembalikan data dengan ukuran baris lebih besar dari 64KB
  • Kueri yang memuat data berukuran besar (>10GB)

Nota

  • Beberapa fungsi non-deterministik dan ekspresi runtime dapat menjadi deterministik untuk kueri berulang terhadap data yang sama. Misalnya, ROW_NUMBER().
  • Gunakan ORDER BY dalam kueri Anda jika urutan/urutan baris dalam tataan hasil kueri penting untuk logika aplikasi Anda.
  • Jika data dalam kolom ORDER BY tidak unik, tidak ada urutan baris yang dijamin untuk baris dengan nilai yang sama, apapun pengaturan penyimpanan cache set hasil diaktifkan atau dinonaktifkan.

Penting

Operasi untuk membuat cache tataan hasil dan mengambil data dari cache terjadi pada simpul kontrol instans kumpulan SQL khusus. Saat caching set hasil diaktifkan, menjalankan kueri yang mengembalikan set hasil besar (misalnya, >1GB) dapat menyebabkan throttling tinggi pada node kontrol dan memperlambat respons kueri pada keseluruhan instans. Kueri tersebut biasanya digunakan selama eksplorasi data atau operasi ETL. Untuk menghindari pembebanan pada simpul kontrol dan menyebabkan masalah performa, pengguna harus MENONAKTIFKAN penyimpanan sementara hasil kueri di database sebelum menjalankan jenis kueri tersebut.

Jalankan kueri ini untuk waktu yang dibutuhkan untuk operasi cache kumpulan hasil untuk kueri:

SELECT step_index, operation_type, location_type, status, total_elapsed_time, command
FROM sys.dm_pdw_request_steps
WHERE request_id  = <'request_id'>;

Berikut adalah contoh output untuk kueri yang dijalankan dengan cache set hasil dinonaktifkan.

Cuplikan layar memperlihatkan hasil kueri, termasuk jenis lokasi dan perintah.

Berikut adalah contoh output untuk kueri yang dijalankan dengan caching himpunan hasil diaktifkan.

Cuplikan layar memperlihatkan hasil kueri dengan perintah SELECT * dari [D W ResultCache D b] dot d b o yang dipanggil.

Ketika hasil yang di-cache digunakan

Kumpulan hasil yang di-cache digunakan kembali untuk kueri jika semua persyaratan berikut terpenuhi:

  • Pengguna yang menjalankan kueri memiliki akses ke semua tabel yang dirujuk dalam kueri.
  • Ada kecocokan yang tepat antara kueri baru dan kueri sebelumnya yang menghasilkan cache tataan hasil.
  • Tidak ada perubahan data atau skema dalam tabel tempat kumpulan hasil yang di-cache dihasilkan.

Jalankan perintah ini untuk memeriksa apakah kueri dijalankan dengan hit atau miss cache hasil kueri. Kolom result_cache_hit mengembalikan 1 untuk hit cache, 0 untuk cache miss, dan nilai negatif karena alasan mengapa penembolokan tataan hasil tidak digunakan. Periksa sys.dm_pdw_exec_requests untuk detailnya.

SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests
WHERE request_id = <'Your_Query_Request_ID'>

Mengelola hasil yang di-cache

Ukuran maksimum cache tataan hasil adalah 1 TB per database. Hasil cache secara otomatis tidak valid saat data kueri yang mendasar berubah.

Pengeluaran cache dikelola oleh kumpulan SQL khusus secara otomatis mengikuti jadwal ini:

  • Setiap 48 jam jika kumpulan hasil belum digunakan atau telah dibatalkan.
  • Ketika cache tataan hasil mendekati ukuran maksimum.

Pengguna dapat mengosongkan seluruh cache tataan hasil secara manual dengan menggunakan salah satu opsi berikut:

  • Matikan fitur cache kumpulan hasil untuk database
  • Jalankan DBCC DROPRESULTSETCACHE saat tersambung ke database

Menjeda basis data tidak akan mengosongkan kumpulan hasil yang disimpan dalam cache.

Langkah berikutnya

Untuk tips pengembangan selengkapnya, lihat ringkasan pengembangan.