Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server 2022 (16.x) dan versi yang
lebih baru database Azure SQL Database
Azure SQL Managed Instance
SQL di Microsoft Fabric
Membuat atau memperbarui petunjuk Penyimpanan Kueri untuk query_id tertentu.
Syntax
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @replica_group_id = ] 'replica_group_id' ]
[ ; ]
Arguments
Important
Argumen untuk prosedur tersimpan yang diperluas harus dimasukkan dalam urutan tertentu seperti yang dijelaskan di bagian Sintaks. Jika parameter dimasukkan di luar urutan, pesan kesalahan terjadi.
[ @query_id = ] query_id
Kolom Penyimpanan query_id Kueri dari sys.query_store_query.
@query_id besar.
[ @query_hints = ] N'query_hints'
String karakter opsi kueri dimulai dengan OPTION.
@query_hints adalah nvarchar(maks).
Ketika USE HINT disertakan dalam @query_hints argumen, tanda kutip tunggal di sekitar nama petunjuk individual harus diulang. Contohnya, @query_hints = N'OPTION (MAXDOP = 1, USE HINTS (''ENABLE_QUERY_OPTIMIZER_HOTFIXES'',''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))'.
Untuk informasi selengkapnya, lihat Petunjuk kueri yang didukung.
[ @replica_group_id = ] 'replica_group_id'
Parameter opsional ini menentukan cakupan di mana petunjuk diterapkan pada replika sekunder saat Penyimpanan Kueri untuk sekunder yang dapat dibaca diaktifkan. @replica_group_idbesar. Penyimpanan Kueri untuk replika sekunder didukung mulai dari SQL Server 2025 (17.x) dan versi yang lebih baru, dan di Azure SQL Database. Untuk dukungan platform lengkap, lihat Penyimpanan Kueri untuk replika sekunder.
Argumen @replica_group_id default ke replika lokal (primer atau sekunder), tetapi Anda dapat secara opsional menentukan nilai yang cocok dengan nilai di replica_group_id kolom di sys.query_store_replicas untuk mengatur petunjuk untuk grup replika yang berbeda.
Mengembalikan nilai
0 (berhasil) atau 1 (kegagalan).
Remarks
Petunjuk ditentukan dalam format N'OPTION (..)'string T-SQL yang valid.
- Jika tidak ada petunjuk Penyimpanan Kueri untuk @query_idtertentu, petunjuk Penyimpanan Kueri baru dibuat.
- Jika petunjuk Penyimpanan Kueri sudah ada untuk @query_id tertentu, nilai yang ditentukan untuk @query_hints menggantikan petunjuk yang ditentukan sebelumnya untuk kueri terkait.
- Jika query_id tidak ada, kesalahan akan muncul.
Dalam kasus di mana salah satu petunjuk akan mencegah rencana kueri diproduksi, semua petunjuk diabaikan. Untuk informasi selengkapnya tentang detail kegagalan, lihat sys.query_store_query_hints.
Untuk menghapus petunjuk yang terkait dengan query_id, gunakan prosedur tersimpan sistem sys.sp_query_store_clear_hints.
Petunjuk kueri yang didukung
Petunjuk kueri ini didukung sebagai petunjuk Penyimpanan Kueri:
{ HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| { LOOP | MERGE | HASH } JOIN
| EXPAND VIEWS
| FAST number_rows
| FORCE ORDER
| IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
| KEEP PLAN
| KEEPFIXED PLAN
| MAX_GRANT_PERCENT = percent
| MIN_GRANT_PERCENT = percent
| MAXDOP number_of_processors
| NO_PERFORMANCE_SPOOL
| OPTIMIZE FOR UNKNOWN
| PARAMETERIZATION { SIMPLE | FORCED }
| RECOMPILE
| ROBUST PLAN
| USE HINT ( '<hint_name>' [ , ...n ] )
Petunjuk kueri berikut saat ini tidak didukung:
OPTIMIZE FOR ( @var = val)MAXRECURSION-
USE PLAN(sebagai gantinya, pertimbangkan kemampuan memaksa paket asli Query Store, sp_query_store_force_plan). DISABLE_DEFERRED_COMPILATION_TVDISABLE_TSQL_SCALAR_UDF_INLINING-
Petunjuk tabel (misalnya,
FORCESEEK, ,READUNCOMMITTEDINDEX)
Permissions
Memerlukan izin ALTER pada database.
Examples
Mengidentifikasi kueri di Penyimpanan Kueri
Contoh berikut mengkueri sys.query_store_query_text dan sys.query_store_query untuk mengembalikan query_id untuk fragmen teks kueri yang dijalankan.
Dalam contoh ini, kueri yang kami coba sesuaikan ada dalam SalesLT database sampel:
SELECT *
FROM SalesLT.Address AS A
INNER JOIN SalesLT.CustomerAddress AS CA
ON A.AddressID = CA.AddressID
WHERE PostalCode = '98052'
ORDER BY A.ModifiedDate DESC;
Penyimpanan Kueri tidak segera mencerminkan data kueri ke tampilan sistemnya.
Identifikasi kueri dalam tampilan katalog sistem Penyimpanan Kueri:
SELECT q.query_id,
qt.query_sql_text
FROM sys.query_store_query_text AS qt
INNER JOIN sys.query_store_query AS q
ON qt.query_text_id = q.query_text_id
WHERE query_sql_text LIKE N'%PostalCode =%'
AND query_sql_text NOT LIKE N'%query_store%';
GO
Dalam sampel berikut, contoh kueri sebelumnya dalam SalesLT database diidentifikasi sebagai query_id 39.
Terapkan petunjuk tunggal
Contoh berikut menerapkan RECOMPILE petunjuk ke query_id 39, seperti yang diidentifikasi di Penyimpanan Kueri:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(RECOMPILE)';
Contoh berikut menerapkan petunjuk untuk memaksa estimator kardinalitas warisan ke query_id 39, yang diidentifikasi di Penyimpanan Kueri:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Menerapkan beberapa petunjuk
Contoh berikut menerapkan beberapa petunjuk kueri ke query_id 39, termasuk RECOMPILE, , MAXDOP 1dan perilaku pengoptimal kueri dalam tingkat kompatibilitas 110:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
Menampilkan petunjuk Penyimpanan Kueri
Contoh berikut mengembalikan petunjuk Penyimpanan Kueri yang sudah ada:
SELECT query_hint_id,
query_id,
replica_group_id,
query_hint_text,
last_query_hint_failure_reason,
last_query_hint_failure_reason_desc,
query_hint_failure_count,
source,
source_desc
FROM sys.query_store_query_hints
WHERE query_id = 39;
Menghapus petunjuk dari kueri
Gunakan contoh berikut untuk menghapus petunjuk dari query_id 39, menggunakan prosedur tersimpan sistem sp_query_store_clear_hints.
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;