Query Store ile iyi planı zorla (force plan) veya hint ekle
SQL ServerQuery StoreKomut
USE [Musteri];
-- Iyi plani zorla (query_id / plan_id regresyon sorgusundan):
EXEC sys.sp_query_store_force_plan @query_id = 42, @plan_id = 7;
-- Zorlanmis planlar ve basarisizlik nedeni:
SELECT p.query_id, p.plan_id, p.is_forced_plan, p.plan_forcing_type_desc,
p.force_failure_count, p.last_force_failure_reason_desc
FROM sys.query_store_plan p
WHERE p.is_forced_plan = 1;
-- Geri al:
EXEC sys.sp_query_store_unforce_plan @query_id = 42, @plan_id = 7;
-- 2022+: kodu degistirmeden sorguya hint ekle / kaldir:
EXEC sys.sp_query_store_set_hints @query_id = 42, @query_hints = N'OPTION (RECOMPILE)';
SELECT query_id, query_hint_text, last_query_hint_failure_reason_desc
FROM sys.query_store_query_hints;
EXEC sys.sp_query_store_clear_hints @query_id = 42;Ne yapar?
Seçilen sorgu için Query Store'daki belirli bir planı zorlar; optimizer her derlemede o planı kullanır. 2022'de alternatif olarak uygulama kodunu değiştirmeden sorguya RECOMPILE, MAXDOP, OPTIMIZE FOR gibi hint'ler bağlanır.
Ne zaman kullanılır?
Plan regresyonu nedeniyle canlıda acil müdahale gerektiğinde, kalıcı düzeltme (index, sorgu yeniden yazımı, istatistik) hazırlanana kadar.
Dikkat
Zorlanan plan veri büyüdükçe kötüleşebilir ve kalıcı çözüm değildir; düzenli gözden geçir. Plan kullandığı index silinir/yeniden adlandırılırsa forcing başarısız olur (last_force_failure_reason_desc = NO_INDEX vb.) ve sorgu normal derlenir. Forcing sonrası "morally equivalent" plan yeni bir plan_id ile görünebilir; bu normaldir. Query Store READ_ONLY iken de forcing çalışır; restore veya AG failover sonrası yine de kontrol et.