Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Important
Sorgu Deposu ipuçları , uygulama kodunu değiştirmeden sorgu planlarını şekillendirmek için kullanımı kolay bir yöntem sağlar. Sorgu Deposu ipuçları plan kılavuzlarından daha basittir. Sorgu Deposu ipuçları Azure SQL Veritabanı, Microsoft Fabric'teki SQL veritabanı, Azure SQL Yönetilen Örneği ve SQL Server 2022 (16.x) ve sonraki sürümlerde kullanılabilir.
Plan kılavuzları, SQL Server'da gerçek sorgunun metnini doğrudan değiştiremediğinizde veya değiştirmek istemediğinizde sorguların performansını iyileştirmenize olanak verir. Plan kılavuzları, sorgu ipuçları veya sabit bir sorgu planı ekleyerek sorguların iyileştirilmesini etkiler. Bir üçüncü taraf satıcı tarafından sağlanan veritabanı uygulamasındaki sorguların küçük bir alt kümesi beklendiği gibi performans göstermediğinde plan kılavuzları yararlı olabilir. Plan kılavuzunda, en iyi duruma getirmek istediğiniz Transact-SQL deyimini ve kullanmak istediğiniz sorgu ipuçlarını içeren option yan tümcesini veya sorguyu iyileştirmek için kullanmak istediğiniz belirli bir sorgu planını belirtirsiniz. Sorgu yürütürken, SQL Server Transact-SQL deyimini plan kılavuzuyla eşleştirir ve option yan tümcesini çalışma zamanında sorguya ekler veya belirtilen sorgu planını kullanır. SQL Server Sorgu İyileştiricisi genellikle sorgu için en iyi yürütme planını seçtiğinden, deneyimli geliştiriciler ve veritabanı yöneticileri için son çare olarak yalnızca plan kılavuzlarını kullanmanızı öneririz.
Oluşturabileceğiniz toplam plan kılavuzu sayısı yalnızca kullanılabilir sistem kaynaklarıyla sınırlıdır. Bununla birlikte, plan kılavuzları iyileştirilmiş veya kararlı performans için hedeflenen görev açısından kritik sorgular ile sınırlandırılmalıdır. Plan kılavuzları, dağıtılan bir uygulamanın sorgu yükünün çoğunu etkilemek için kullanılmamalıdır.
Bu özellik ile zorlanarak elde edilen yürütme planı, zorlanan planla aynı veya benzer olacaktır. Sonuçta elde edilen plan, plan kılavuzu tarafından belirtilen planla aynı olmadığından, planların performansı farklılık gösterebilir. Nadir durumlarda performans farkı önemli ve negatif olabilir; bu durumda yöneticinin zorunlu planı kaldırması gerekir.
Plan kılavuzları Microsoft SQL Server'ın her sürümünde kullanılamaz. SQL Server sürümleri tarafından desteklenen özelliklerin listesi için bkz. SQL Server 2016 Sürümleri Tarafından Desteklenen Özellikler. Plan kılavuzları herhangi bir sürümde görünür. Ayrıca herhangi bir sürüme plan kılavuzları içeren bir veritabanı ekleyebilirsiniz. Bir veritabanını SQL Server'ın yükseltilmiş bir sürümüne geri yüklerken veya eklerken plan kılavuzları değişmeden kalır.
Plan Kılavuzu Türleri
Aşağıdaki plan kılavuzu türleri oluşturulabilir.
OBJECT planı kılavuzu
OBJECT plan kılavuzu, Transact-SQL saklı yordamları, skaler kullanıcı tanımlı işlevler, çok deyimli tablo değerli kullanıcı tanımlı işlevler ve DML tetikleyicileri bağlamında yürütülen sorgulara uyan bir kılavuzdur.
Aşağıdaki, @Country_region parametresini alan saklı yordamın, AdventureWorks2025 veritabanına karşı dağıtılan bir veritabanı uygulamasında olduğunu varsayalım:
CREATE PROCEDURE Sales.GetSalesOrderByCountry (@Country_region nvarchar(60))
AS
BEGIN
SELECT *
FROM Sales.SalesOrderHeader AS h, Sales.Customer AS c,
Sales.SalesTerritory AS t
WHERE h.CustomerID = c.CustomerID
AND c.TerritoryID = t.TerritoryID
AND CountryRegionCode = @Country_region
END;
Bu saklı yordamın, @Country_region = N'AU' ile (Avustralya) için uygun olacak şekilde derlendiğini ve optimize edildiğini varsayalım. Ancak, Avustralya'dan kaynaklanan görece az sayıda satış siparişi olduğundan, sorgu daha fazla satış siparişine sahip ülkelerin/bölgelerin parametre değerleri kullanılarak yürütülürken performans düşer. Satış siparişlerinin çoğu ABD'den kaynaklandığından, için @Country_region = N'US' oluşturulan bir sorgu planı büyük olasılıkla parametresinin @Country_region tüm olası değerleri için daha iyi performans gösterir.
Saklı yordamı değiştirip sorguya OPTIMIZE FOR sorgu ipucunu ekleyerek bu sorunu çözebilirsiniz. Ancak saklı yordam dağıtılan bir uygulamada olduğundan, uygulama kodunu doğrudan değiştiremezsiniz. Bunun yerine, veritabanında aşağıdaki plan kılavuzunu AdventureWorks2025 oluşturabilirsiniz.
sp_create_plan_guide
@name = N'Guide1',
@stmt = N'SELECT *FROM Sales.SalesOrderHeader AS h,
Sales.Customer AS c,
Sales.SalesTerritory AS t
WHERE h.CustomerID = c.CustomerID
AND c.TerritoryID = t.TerritoryID
AND CountryRegionCode = @Country_region',
@type = N'OBJECT',
@module_or_batch = N'Sales.GetSalesOrderByCountry',
@params = NULL,
@hints = N'OPTION (OPTIMIZE FOR (@Country_region = N''US''))';
Sorgu, sp_create_plan_guide deyiminde belirtilerek yürütüldüğünde, iyileştirmeden önce OPTIMIZE FOR (@Country = N''US'') yan tümcesini içerecek şekilde değiştirilir.
SQL planı kılavuzu
SQL planı kılavuzu, veritabanı nesnesinin parçası olmayan tek başına Transact-SQL deyimleri ve toplu işlemleri bağlamında yürütülen sorgularla eşleşir. SQL tabanlı plan kılavuzları, belirtilen bir forma parametreleştiren sorguları eşleştirmek için de kullanılabilir. SQL planı kılavuzları tek başına Transact-SQL deyimleri ve toplu işlemler için geçerlidir. Genellikle, bu deyimler bir uygulama tarafından sp_executesql sistem saklı yordamı kullanılarak gönderilir. Örneğin, aşağıdaki bağımsız işlem partisini göz önünde bulundurun:
SELECT TOP 1 * FROM Sales.SalesOrderHeader ORDER BY OrderDate DESC;
Bu sorguda paralel yürütme planının oluşturulmasını önlemek için aşağıdaki plan kılavuzunu oluşturun ve parametresinde sorgu ipucunu MAXDOP olarak 1 ayarlayın@hints.
sp_create_plan_guide
@name = N'Guide2',
@stmt = N'SELECT TOP 1 * FROM Sales.SalesOrderHeader ORDER BY OrderDate DESC',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (MAXDOP 1)';
Başka bir örnek olarak, sp_executesql kullanılarak gönderilen aşağıdaki SQL deyimini göz önünde bulundurun.
exec sp_executesql N'SELECT * FROM Sales.SalesOrderHeader
where SalesOrderID = @so_id', N'@so_id int', @so_id = 43662;
Bu sorgunun her yürütülmesi için benzersiz bir plan oluşturmak için aşağıdaki plan kılavuzunu oluşturun ve parametresindeki OPTION (RECOMPILE) sorgu ipucunu @hints kullanın.
exec sp_create_plan_guide
@name = N'PlanGuide1_SalesOrders',
@stmt = N'SELECT * FROM Sales.SalesOrderHeader
where SalesOrderID = @so_id',
@type = N'SQL',
@module_or_batch = NULL,
@params = N'@so_id int',
@hints = N'OPTION (recompile)';
Important
@module_or_batch ve @params bağımsız değişkenleri için sağlanan değerler, sp_create_plan guide deyiminde, gerçek sorguda gönderilen karşılık gelen metinle eşleşmelidir. Daha fazla bilgi için bkz. sp_create_plan_guide (Transact-SQL) ve SQL Server Profiler'ı Kullanarak Plan Oluşturma ve Test Kılavuzları.
SQL planı kılavuzları, PARAMETERIZATION veritabanı seçeneği FORCED olarak ayarlandığında veya parametreli sorgu sınıfını belirten bir TEMPLATE planı kılavuzu oluşturulduğunda aynı forma parametreleştiren sorgularda da oluşturulabilir.
ŞABLON planı kılavuzu
ŞABLON plan kılavuzu, belirli bir forma göre parametrelenen bağımsız sorgularla eşleşir. Bu plan kılavuzları, bir sorgu sınıfı için veritabanının geçerli PARAMETERIZATION veritabanı SET seçeneğini geçersiz kılmak için kullanılır.
Aşağıdaki durumlardan birinde ŞABLON planı kılavuzu oluşturabilirsiniz:
PARAMETERIZATION veritabanı seçeneği FORCED olarak ayarlanır, ancak Basit Parametreleştirme kurallarına göre derlenmesi gereken sorgular vardır.
PARAMETERIZATION veritabanı seçeneği SIMPLE (varsayılan ayar) olarak ayarlanır, ancak bir sorgu sınıfında Zorlamalı Parametreleştirme'nin denenmesini istiyorsunuz.
Plan Kılavuzu Eşleştirme Gereksinimleri
Plan kılavuzlarının kapsamı, oluşturuldukları veritabanı ile sınırlıdır. Bu nedenle, yalnızca bir sorgu yürütülürken geçerli olan veritabanındaki plan kılavuzları sorguyla eşleştirilebilir. Örneğin, geçerli veritabanı ise AdventureWorks2025 ve aşağıdaki sorgu yürütülür:
SELECT FirstName, LastName FROM Person.Person;
Yalnızca veritabanındaki AdventureWorks2025 plan kılavuzları bu sorguyla eşleştirilmeye uygundur. Eğer AdventureWorks2025 şu anda geçerli veritabanı ise, aşağıdaki deyimler çalıştırılır:
USE DB1;
SELECT FirstName, LastName FROM Person.Person;
Sorgu, DB1 bağlamında yürütülürken yalnızca DB1 plan kılavuzları sorguyla eşleştirilmeye uygundur.
SQL veya TEMPLATE tabanlı plan kılavuzları için, SQL Server @module_or_batch ve @params bağımsız değişkenlerinin değerlerini bir sorguyla eşleştirmek için iki değeri karakter karakter karşılaştırarak eşleştirir. Bu, metni tam olarak SQL Server'ın toplu işlemde aldığı şekilde sağlamanız gerektiği anlamına gelir.
@type = 'SQL' ve @module_or_batch NULL olarak ayarlandığında değeri @module_or_batch değerine @stmtayarlanır. Bu, statement_text değerinin SQL Server'a gönderildiğinden aynı biçimde(karakter için karakter) sağlanması gerektiği anlamına gelir. Bu eşleşmeyi kolaylaştırmak için iç dönüştürme gerçekleştirilmez.
Hem normal (SQL veya OBJECT) plan kılavuzu hem de ŞABLON planı kılavuzu bir deyime uygulanabilirse, yalnızca normal plan kılavuzu kullanılır.
Note
Plan kılavuzu oluşturmak istediğiniz deyimi içeren toplu işlem USE veritabanı deyimi içeremez.
Plan Kılavuzunun Plan Önbelleği Üzerindeki Etkisi
Modülde plan kılavuzu oluşturmak, bu modülün sorgu planını plan önbelleğinden kaldırır. Bir toplu işlemde OBJECT veya SQL türünde bir plan kılavuzu oluşturmak, aynı karma değerine sahip bir toplu iş için sorgu planını kaldırır. TEMPLATE türünde bir plan kılavuzu oluşturmak, bu veritabanındaki plan önbelleğinden tüm tek deyimli toplu işlemleri kaldırır.
İlgili Görevler
| Task | Topic |
|---|---|
| Plan kılavuzunun nasıl oluşturulacağını açıklar. | Yeni Plan Kılavuzu Oluşturma |
| Parametreli sorgular için plan kılavuzunun nasıl oluşturulacağını açıklar. | Parametreli Sorgular için Plan Kılavuzu Oluşturma |
| Plan kılavuzlarını kullanarak sorgu parametreleştirme davranışını denetlemeyi açıklar. | Plan Kılavuzlarını Kullanarak Sorgu Parametreleştirme Davranışını Belirtme |
| Bir plan kılavuzuna sabit sorgu planının nasıl dahil yapılacağını açıklar. | Plan Kılavuzuna Sabit Sorgu Planı Uygulama |
| Plan kılavuzunda sorgu ipuçlarının nasıl belirtileceğini açıklar. | Plan Kılavuzuna Sorgu İpuçları Ekleme |
| Plan kılavuzu özelliklerini nasıl görüntüleyeceğinizi açıklar. | Plan Kılavuzu Özelliklerini Görüntüleme |
| Plan kılavuzları oluşturmak ve test etmek için SQL Server Profiler'ın nasıl kullanılacağını açıklar. | PLAN Kılavuzları Oluşturmak ve Test Etmek için SQL Server Profiler Kullanma |
| Plan kılavuzlarının nasıl doğrulandığı açıklanır. | Yükseltmeden Sonra Plan Kılavuzlarını Doğrulama |
Ayrıca Bkz.
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)
sp_control_plan_guide (Transact-SQL)
sys.plan_guides (Transact-SQL)
sys.fn_validate_plan_guide (Transact-SQL)