Aracılığıyla paylaş


sys.sp_query_store_set_hints (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri Microsoft Fabric'teAzure SQL VeritabanıAzure SQL Yönetilen Örneği SQL veritabanı

Belirli bir query_idiçin Sorgu Deposu ipuçlarını oluşturur veya güncelleştirir.

Transact-SQL söz dizimi kuralları

Syntax

sp_query_store_set_hints
    [ @query_id = ] query_id ,
    [ @query_hints = ] 'query_hints'
    [ , [ @replica_group_id = ] 'replica_group_id' ]
[ ; ]

Arguments

Important

Genişletilmiş saklı yordamlar için bağımsız değişkenler, Sözdizimi bölümünde açıklandığı gibi belirli bir sırada girilmelidir. Parametreler sıra dışı girilirse bir hata iletisi oluşur.

[ @query_id = ] query_id

query_id'den Sorgu Deposu sütunu.

@query_idbigint.

[ @query_hints = ] N'query_hints'

OPTIONile başlayan sorgu seçeneklerinin karakter dizesi. @query_hintsnvarchar(max).

Bağımsız değişkene USE HINT eklendiğinde@query_hints, tek tek ipucu adlarının etrafındaki tek tırnak işaretleri yinelenmelidir. Örneğin, @query_hints = N'OPTION (MAXDOP = 1, USE HINTS (''ENABLE_QUERY_OPTIMIZER_HOTFIXES'',''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))'.

Daha fazla bilgi için bkz . Desteklenen sorgu ipuçları.

[ @replica_group_id = ] 'replica_group_id'

Bu isteğe bağlı parametre, okunabilir ikincil öğeler için Sorgu Deposu etkinleştirildiğinde ipucunun ikincil çoğaltmaya uygulanacağı kapsamı belirler. @replica_group_idbüyük bir şey. İkincil replikalar için Query Store, SQL Server 2025 (17.x) ve sonraki sürümlerden itibaren ve Azure SQL Database'de desteklenmektedir. Tam platform desteği için, ikincil replikalar için Query Store'a bakınız.

@replica_group_id bağımsız değişkeni varsayılan olarak yerel çoğaltmadır (birincil veya ikincil), ancak isteğe bağlı olarak farklı bir çoğaltma grubu için ipucu ayarlamak üzere replica_group_id sütunundaki bir değerle eşleşen bir değer belirtebilirsiniz.

Dönüş değeri

0 (başarı) veya 1 (başarısızlık).

Remarks

İpuçları, N'OPTION (..)'geçerli bir T-SQL dize biçiminde belirtilir.

  • Belirli bir @query_idiçin Sorgu Deposu ipucu yoksa yeni bir Sorgu Deposu ipucu oluşturulur.
  • Belirli bir @query_id için Sorgu Deposu ipucu zaten varsa, @query_hints için belirtilen değer ilişkili sorgu için önceden belirtilen ipuçlarının yerini alır.
  • query_id yoksa bir hata oluşur.

İpuçlarından birinin sorgu planının üretilmesini engellediği durumlarda, tüm ipuçları yoksayılır. Hata ayrıntıları hakkında daha fazla bilgi için bkz. sys.query_store_query_hints.

bir query_idile ilişkili ipuçlarını kaldırmak için sys.sp_query_store_clear_hintssistem saklı yordamını kullanın.

Desteklenen sorgu ipuçları

Bu sorgu ipuçları Sorgu Deposu ipuçları olarak desteklenir:

{ 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 ] )

Şu anda aşağıdaki sorgu ipuçları desteklenmiyor:

  • OPTIMIZE FOR ( @var = val)
  • MAXRECURSION
  • USE PLAN (bunun yerine Sorgu Deposu'nun özgün plan zorlama özelliğini sp_query_store_force_plan) göz önünde bulundurun).
  • DISABLE_DEFERRED_COMPILATION_TV
  • DISABLE_TSQL_SCALAR_UDF_INLINING
  • Tablo ipuçları (örneğin, FORCESEEK, READUNCOMMITTED, INDEX)

Permissions

Veritabanında ALTER izni gerektirir.

Examples

Sorgu Deposu'nda sorgu tanımlama

Aşağıdaki örnek, yürütülen bir sorgu metin parçasının query_id döndürmek için sys.query_store_query_text ve sys.query_store_query sorgular.

Bu örnekte, ayarlamaya çalıştığınız sorgu SalesLT örnek veritabanındadır:

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;

Sorgu Deposu, sorgu verilerini sistem görünümlerine hemen yansıtmaz.

Sorgu Deposu sistem kataloğu görünümlerinde sorguyu tanımlayın:

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

Aşağıdaki örneklerde, SalesLT veritabanındaki önceki sorgu örneği query_id 39 olarak tanımlanmıştır.

Tek ipucu uygulama

Aşağıdaki örnek, ipucunu RECOMPILE Sorgu Deposu'nda tanımlanan query_id 39'a uygular:

EXECUTE sys.sp_query_store_set_hints
    @query_id = 39,
    @query_hints = N'OPTION(RECOMPILE)';

Aşağıdaki örnek, eski kardinalite tahmin aracı Sorgu Deposu'nda tanımlanan query_id 39'a zorlama ipucunu uygular:

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

Birden çok ipucu uygulama

Aşağıdaki örnek, , ve uyumluluk düzeyi 110'daki sorgu iyileştirici davranışı dahil olmak üzere RECOMPILEMAXDOP 1query_id 39'a birden çok sorgu ipucu uygular:

EXECUTE sys.sp_query_store_set_hints
    @query_id = 39,
    @query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';

Sorgu Deposu ipuçlarını görüntüleme

Aşağıdaki örnek mevcut Sorgu Deposu ipuçlarını döndürür:

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;

İpucunu sorgudan kaldırma

sp_query_store_clear_hints sistem saklı yordamını kullanarak ipucunu query_id 39'dan kaldırmak için aşağıdaki örneği kullanın.

EXECUTE sys.sp_query_store_clear_hints @query_id = 39;