Bagikan melalui


Praktik terbaik petunjuk Penyimpanan Kueri

Berlaku untuk: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

Artikel ini merinci praktik terbaik untuk menggunakan petunjuk Penyimpanan Kueri. Petunjuk Penyimpanan Kueri memungkinkan pembentukan bentuk rencana kueri tanpa memodifikasi kode aplikasi.

Kasus penggunaan untuk petunjuk Penyimpanan Kueri

Pertimbangkan kasus penggunaan berikut sebagai cita-cita petunjuk Penyimpanan Kueri. Untuk informasi selengkapnya, lihat Kapan menggunakan petunjuk Penyimpanan Kueri.

Perhatian

Karena Pengoptimal Kueri SQL Server biasanya memilih rencana eksekusi terbaik untuk kueri, sebaiknya hanya menggunakan petunjuk sebagai upaya terakhir untuk pengembang dan administrator database berpengalaman. Untuk informasi selengkapnya, lihat Petunjuk Kueri.

Ketika kode tidak dapat diubah

Menggunakan petunjuk Penyimpanan Kueri memungkinkan Anda memengaruhi rencana eksekusi kueri tanpa mengubah kode aplikasi atau objek database. Tidak ada fitur lain yang memungkinkan Anda menerapkan petunjuk kueri dengan cepat dan mudah.

Anda dapat menggunakan petunjuk Penyimpanan Kueri, misalnya, untuk menguntungkan ETL tanpa menyebarkan ulang kode. Pelajari cara meningkatkan pemuatan massal dengan petunjuk Penyimpanan Kueri dengan video 14 menit ini:

Petunjuk Penyimpanan Kueri adalah metode penyetelan kueri yang ringan, tetapi jika kueri menjadi bermasalah, itu harus diatasi dengan perubahan kode yang lebih substansial. Jika Anda secara teratur menemukan kebutuhan untuk menerapkan petunjuk Penyimpanan Kueri ke kueri, pertimbangkan penulisan ulang kueri yang lebih besar. Pengoptimal Kueri SQL Server biasanya memilih rencana eksekusi terbaik untuk kueri, kami sarankan hanya menggunakan petunjuk sebagai upaya terakhir untuk pengembang dan administrator database berpengalaman.

Untuk informasi tentang petunjuk kueri mana yang dapat diterapkan, lihat Petunjuk kueri yang didukung.

Di bawah beban transaksi tinggi atau dengan kode misi penting

Jika perubahan kode tidak praktis karena persyaratan waktu aktif tinggi atau beban transaksional, petunjuk Penyimpanan Kueri dapat menerapkan petunjuk kueri ke beban kerja kueri yang ada dengan cepat. Menambahkan dan menghapus petunjuk Penyimpanan Kueri itu mudah.

Petunjuk Penyimpanan Kueri dapat ditambahkan dan dihapus ke batch kueri untuk menyesuaikan performa untuk windows yang waktunya habis untuk ledakan beban kerja yang luar biasa.

Sebagai pengganti panduan rencana

Sebelumnya untuk petunjuk Penyimpanan Kueri, pengembang harus mengandalkan panduan rencana untuk menyelesaikan tugas serupa, yang bisa rumit untuk digunakan. Petunjuk Penyimpanan Kueri terintegrasi dengan fitur Penyimpanan Kueri SQL Server Management Studio (SSMS), untuk eksplorasi visual kueri.

Dengan panduan rencana, mencari semua paket menggunakan cuplikan kueri diperlukan. Fitur petunjuk Penyimpanan Kueri tidak memerlukan kueri yang cocok persis untuk memengaruhi rencana kueri yang dihasilkan. Petunjuk Penyimpanan Kueri dapat diterapkan ke query_id dalam himpunan data Penyimpanan Kueri.

Petunjuk Penyimpanan Kueri mengambil alih petunjuk tingkat pernyataan yang dikodekan secara permanen dan panduan paket yang ada.

Pertimbangkan tingkat kompatibilitas yang lebih baru

Petunjuk Penyimpanan Kueri bisa menjadi metode yang berharga ketika tingkat kompatibilitas database yang lebih baru tidak tersedia untuk Anda karena spesifikasi vendor atau penundaan pengujian yang lebih besar, misalnya. Ketika tingkat kompatibilitas yang lebih tinggi tersedia untuk database, pertimbangkan untuk meningkatkan tingkat kompatibilitas database kueri individual untuk memanfaatkan pengoptimalan performa dan fitur terbaru SQL Server.

Misalnya, jika Anda memiliki instans SQL Server 2022 (16.x) dengan database di tingkat kompatibilitas 140, Anda masih dapat menggunakan petunjuk Penyimpanan Kueri untuk menjalankan kueri individual di tingkat kompatibilitas 160. Anda dapat menggunakan petunjuk berikut:

EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';

Untuk tutorial lengkap, lihat Contoh petunjuk Penyimpanan Kueri.

Pertimbangkan tingkat kompatibilitas yang lebih lama setelah peningkatan

Kasus lain di mana petunjuk Penyimpanan Kueri dapat membantu adalah di mana kueri tidak dapat dimodifikasi langsung setelah migrasi atau peningkatan instans SQL Server. Gunakan petunjuk Penyimpanan Kueri untuk menerapkan tingkat kompatibilitas sebelumnya untuk kueri hingga dapat ditulis ulang atau ditangani agar berfungsi dengan baik dalam tingkat kompatibilitas terbaru. Identifikasi kueri outlier yang telah mengalami kemunculan kembali dalam tingkat kompatibilitas yang lebih tinggi menggunakan laporan kueri yang diregresi Query Store, menggunakan alat Query Tuning Advisor selama migrasi, atau telemetri aplikasi tingkat kueri lainnya. Untuk informasi selengkapnya tentang perbedaan antara tingkat kompatibilitas, tinjau Perbedaan antara tingkat kompatibilitas.

Setelah performa menguji tingkat kompatibilitas baru dan menyebarkan petunjuk Penyimpanan Kueri dengan cara ini, Anda dapat meningkatkan seluruh tingkat kompatibilitas database sambil menjaga kueri kunci bermasalah pada tingkat kompatibilitas sebelumnya, tanpa perubahan kode apa pun.

Pertimbangan petunjuk Penyimpanan Kueri

Pertimbangkan skenario berikut saat menyebarkan petunjuk Penyimpanan Kueri.

Perubahan distribusi data

Panduan rencana, paket paksa melalui Penyimpanan Kueri, dan petunjuk Penyimpanan Kueri mengambil alih pengambilan keputusan pengoptimal. Petunjuk Penyimpanan Kueri mungkin bermanfaat sekarang, tetapi tidak di masa mendatang. Misalnya, jika petunjuk Penyimpanan Kueri membantu kueri dalam distribusi data sebelumnya, itu mungkin kontra-produktif jika operasi DML skala besar mengubah data. Distribusi data baru dapat menyebabkan pengoptimal membuat keputusan yang lebih baik daripada petunjuk. Skenario ini adalah konsekuensi paling umum dari memaksa perilaku rencana.

Mengevaluasi ulang strategi petunjuk Penyimpanan Kueri Anda secara teratur

Evaluasi kembali strategi petunjuk Penyimpanan Kueri yang ada dalam kasus berikut:

  • Setelah diketahui perubahan distribusi data besar.
  • Saat tujuan tingkat layanan (SLO) Azure SQL Database atau Instans Terkelola atau komputer virtual Anda telah berubah.
  • Di mana perbaikan rencana telah menjadi berumur panjang. Petunjuk Penyimpanan Kueri paling baik digunakan untuk perbaikan jangka pendek.
  • Regresi performa yang tidak terduga.

Potensi dampak luas

Petunjuk Penyimpanan Kueri akan memengaruhi semua eksekusi kueri, terlepas dari kumpulan parameter, aplikasi sumber, pengguna, atau tataan hasil. Dalam kasus regresi performa yang tidak disengaja, petunjuk Penyimpanan Kueri yang dibuat dengan sys.sp_query_store_set_hints dapat dengan mudah dihapus dengan sys.sp_query_store_clear_hints.

Muat perubahan pengujian dengan hati-hati untuk sistem misi penting atau sensitif sebelum menerapkan petunjuk Query Store dalam produksi.

Parameterisasi paksa dan petunjuk RECOMPILE tidak didukung

Menerapkan petunjuk kueri RECOMPILE dengan petunjuk Penyimpanan Kueri tidak didukung saat PARAMETERISASI opsi database diatur ke FORCED. Untuk informasi selengkapnya, lihat Panduan untuk Menggunakan Parameterisasi Paksa.

Petunjuk RECOMPILE tidak kompatibel dengan parameterisasi paksa yang ditetapkan di tingkat database. Jika database memiliki kumpulan parameterisasi paksa, dan petunjuk RECOMPILE adalah bagian dari string petunjuk yang ditetapkan di Penyimpanan Kueri untuk kueri, Mesin Database akan mengabaikan petunjuk RECOMPILE dan akan menerapkan petunjuk lain jika dimanfaatkan. Selain itu, mulai Juli 2022 di Azure SQL Database, peringatan (kode kesalahan 12461) harus dikeluarkan yang menyatakan bahwa petunjuk RECOMPILE diabaikan.

Untuk informasi tentang petunjuk kueri mana yang dapat diterapkan, lihat Petunjuk kueri yang didukung.

Baca juga

Langkah berikutnya