Aracılığıyla paylaş


Plan Kılavuzuna Sabit Sorgu Planı Uygulama

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

OBJECT veya SQL türünde bir plan kılavuzuna sabit bir sorgu planı uygulayabilirsiniz. Sabit sorgu planı uygulayan plan kılavuzları, belirli bir sorgu için iyileştirici tarafından seçilenden daha iyi performans gösteren mevcut bir yürütme planı hakkında bilgi edindiğinizde kullanışlıdır.

Aşağıdaki örnek, basit bir geçici SQL deyimi için bir plan kılavuzu oluşturur. Bu ifade için istenen sorgu planı, @hints parametresinde sorgu için XML Showplan belirtilerek plan kılavuzunda sağlanır. Örnek ilk olarak plan önbelleğinde bir plan oluşturmak için SQL deyimini yürütür. Bu örneğin amaçları doğrultusunda, oluşturulan planın istenen plan olduğu ve ek sorgu ayarlaması gerek olmadığı varsayılır. Sorgunun XML Showplan'ı, sys.dm_exec_query_stats, sys.dm_exec_sql_text ve sys.dm_exec_text_query_plan dinamik yönetim görünümleri sorgulanarak elde edilir ve @xml_showplan değişkenine atanır. Değişken @xml_showplan daha sonra parametredeki sp_create_plan_guide ifadeye @hints iletilir. Ya da, plan önbelleğindeki bir sorgu planından sp_create_plan_guide_from_handle stored prosedürünü kullanarak plan rehberi oluşturabilirsiniz.

USE AdventureWorks2022;  
GO  
SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;  
GO  
DECLARE @xml_showplan nvarchar(max);  
SET @xml_showplan = (SELECT query_plan  
    FROM sys.dm_exec_query_stats AS qs   
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st  
    CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, DEFAULT, DEFAULT) AS qp  
    WHERE st.text LIKE N'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;%');  
  
EXEC sp_create_plan_guide   
    @name = N'Guide1_from_XML_showplan',   
    @stmt = N'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;',   
    @type = N'SQL',  
    @module_or_batch = NULL,   
    @params = NULL,   
    @hints = @xml_showplan;  
GO