sp_query_store_set_hints (T-SQL)
Berlaku untuk: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance
Membuat atau memperbarui petunjuk Penyimpanan Kueri untuk query_id tertentu.
Sintaks
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @query_hint_scope = ] 'replica_group_id' ]
[ ; ]
Argumen
[ @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). Untuk informasi selengkapnya, lihat Petunjuk kueri yang didukung di artikel ini.
[ @query_hint_scope = ] 'replica_group_id'
Secara default, cakupan petunjuk Penyimpanan Kueri baru hanyalah replika lokal. @query_hint_scope kecil. Parameter opsional ini menentukan cakupan di mana petunjuk akan diterapkan pada replika sekunder saat Penyimpanan Kueri untuk replika sekunder diaktifkan. Argumen query_hint_scope opsional hanya default ke replika lokal (primer atau sekunder), tetapi Anda dapat secara opsional menentukan replica_group_id mereferensikan sys.query_store_replicas.
Mengembalikan nilai
0
(berhasil) atau 1
(kegagalan).
Keterangan
Petunjuk ditentukan dalam format N'OPTION (..)'
string T-SQL yang valid.
- Jika tidak ada petunjuk Penyimpanan Kueri untuk query_id tertentu, petunjuk Penyimpanan Kueri baru akan dibuat.
- Jika petunjuk Penyimpanan Kueri sudah ada untuk query_id tertentu, nilai terakhir yang disediakan akan mengambil alih nilai yang ditentukan sebelumnya untuk kueri terkait.
- Jika query_id tidak ada, kesalahan akan muncul.
Dalam kasus di mana petunjuk akan menyebabkan kueri gagal, petunjuk diabaikan dan detail kegagalan terbaru dapat dilihat di 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_TV
DISABLE_TSQL_SCALAR_UDF_INLINING
- Petunjuk tabel (misalnya, FORCESEEK, READUNCOMMITTED, INDEX)
Izin
Memerlukan izin UBAH pada database.
Contoh
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 qt
INNER JOIN sys.query_store_query 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 petunjuk RECOMPILE ke query_id 39, seperti yang diidentifikasi di Penyimpanan Kueri:
EXEC 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:
EXEC 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 1, dan perilaku pengoptimal kueri SQL 2012:
EXEC 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, 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 (Transact-SQL ).
EXEC sys.sp_query_store_clear_hints @query_id = 39;