Share via


Plan kılavuzları

Plan kılavuzları izin vermek sen olamaz ya da doğrudan gerçek sorgu metnini değiştirmek istemiyorsanız sorguları performansını SQL Server 2012. Plan kılavuzları sorguları optimizasyon sorgu ipuçları veya sabit sorgu planı ekleyerek etkisi. Zaman beklendiği gibi küçük bir alt kümesi sorguları bir üçüncü taraf satıcı tarafından sağlanan veritabanı uygulaması değil performans planı kılavuzları yararlı olabilir. Plan Kılavuzu'nda, Transact-sql deyimini optimize istediğiniz ve sorgu en iyi duruma getirmek için kullanmak istediğiniz belirli sorgu planı ya da kullanmak istediğiniz sorgu ipuçları içeren bir seçenek yan tümcesi belirtin. Sorgu yürütüldüğünde, SQL Serverplan Kılavuzu için Transact-sql deyimi eşleşen ve zamanında sorguya OPTION yan tümcesi ekler veya belirtilen sorgu planı kullanır.

Plan kılavuzları oluşturabilirsiniz sayısı yalnızca kullanılabilir sistem kaynakları ile sınırlıdır. Yine de, plan kılavuzları kritik sorguları, stabilize veya geliştirilmiş performans için hedeflenen sınırlandırılmalıdır. Plan kılavuzları, dağıtılan uygulama sorgu yük çoğunu etkilemek için kullanılmamalıdır.

[!NOT]

Plan kılavuzları her sürümünde kullanılan Microsoft SQL Server. Sürümü tarafından desteklenen özellikleri listesi için SQL Serverbakın SQL Server 2012 Sürümleri Tarafından Desteklenen Özellikler. Plan kılavuzları, herhangi bir baskı olarak görülebilir. Plan kılavuzları için herhangi bir sürümü içeren bir veritabanı da ekleyebilirsiniz. Plan kılavuzları kalır bozulmadan geri yüklemek veya bir veritabanını iliştirmek için yükseltilmiş sürümü SQL Server.

Plan kılavuzları türleri

Plan kılavuzları aşağıdaki türde oluşturulabilir.

  • object plan Kılavuzu
    object plan Kılavuzu execute bağlamında sorguları eşleşir Transact-SQLsaklı yordamları, skalar kullanıcı tanımlı işlevler, multi-statement tablo değerli kullanıcı tanımlı işlevler ve dml Tetikleyiciler.

    Aşağıdaki saklı yordam alır varsayalım @Country\_ region parametresidir karşı dağıtılmış bir veritabanı uygulamasında AdventureWorks2012 veritabanı:

    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 derlenmiş ve en iyi şekilde gösterdiğini varsayalım @Country\_ region = N'AU' (Avustralya). Avustralya kaynaklı nispeten az satış siparişleri olduğundan, daha fazla satış siparişleri ile ülkeler parametre değerlerini kullanarak sorguyu yürütür ancak performans azalır. Çünkü ABD, bir sorgu planı için oluşturulan en satış siparişleri kaynaklanan @Country\_ region = N'US' büyük olasılıkla daha iyi için tüm olası değerleri gerçekleştirmek istiyorsunuz @Country\_ region parametresi.

    Eklemek için saklı yordam değiştirerek bu sorunu çözmek OPTIMIZE FORsorgu ipucu sorgu. Ancak, saklı yordamı, dağıtılmış bir uygulama olduğundan, uygulama kodu doğrudan değiştiremezsiniz. Bunun yerine, sen-ebilmek yaratmak içinde aşağıdaki plan Kılavuzu AdventureWorks2012 veritabanı.

    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''))';
    

    Zaman içinde belirtilen sorgu sp_create_plan_guidedeyimi yürütür, sorgu önce optimizasyonu içerecek şekilde değiştirilmiş OPTIMIZE FOR (@Country = N''US'')tümcesi.

  • sql plan Kılavuzu
    Bir sql plan Kılavuzu execute tek başına bağlamında sorguları eşleşir Transact-SQLdeyimleri ve veritabanı nesnesinin bir parçası olmayan toplu. sql tabanlı planı kılavuzları, belirtilen forma parameterize sorgu eşleştirmek için de kullanılabilir. sql planı kılavuzları uygulama için tek başına Transact-SQLdeyimleri ve toplu işlem. Sık sık, bu ifadeler kullanarak bir uygulama tarafından gönderilmektedir sp_executesql sistem saklı yordamını. Örneğin, aşağıdaki toplu işi tek başına göz önünde bulundurun:

    SELECT TOP 1 * FROM Sales.SalesOrderHeader ORDER BY OrderDate DESC;
    

    Bu sorgu oluşturulan paralel yürütme planı engellemek için aşağıdaki plan kılavuz oluşturmak ve ayarlamak MAXDOPsorgu ipucu için 1de @hintsparametresi.

    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)';
    
    Önemli notÖnemli

    İçin sağlanan değerleri @module_or_batchve @paramsbağımsız sp_create_plan guidedeyimi eşleşmesi gerçek sorguda gönderilen ilgili metni. Daha fazla bilgi için sp_create_plan_guide (Transact-sql)ve Oluşturmak ve sınamak için SQL Server Profiler'I kullanma planı kılavuzları.

    sql planı kılavuzları da oluşturulabilir forced PARAMETERIZATION veritabanı seçeneği ayarladığınızda, aynı forma parameterize sorgular veya şablon planlarken Kılavuzu belirterek, oluşturulan sorgu Parametreli bir sınıf.

  • Şablon plan Kılavuzu
    Şablon plan Kılavuzu için belirtilen form parameterize tek başına sorguları eşleşir. Bu planı kılavuzları geçerli PARAMETERIZATION veritabanı set seçenek sorgular bir sınıf için bir veritabanı geçersiz kılmak için kullanılır.

    Şablon plan Kılavuzu aşağıdaki durumlardan birini oluşturabilirsiniz:

    • forced PARAMETERIZATION veritabanı seçeneği AYARLANIR, ancak istediğiniz basit parameterization kurallarına göre derlenmiş sorgu vardır.

    • PARAMETERIZATION veritabanı seçeneği (varsayılan ayar) basit için AYARLANIR, ancak Zorlanmış parameterization sorguları bir sınıf üzerinde güvenilir için istediğiniz.

Kılavuzu gereksinimleri eşleşen planlayın

Plan kılavuzları içinde oluşturuldukları veritabanı kapsamına eklenir. Bu nedenle, geçerli bir sorgu yürütüldüğünde veritabanındaki tek planı kılavuzları sorguya eşleştirilebilir. Örneğin, eğer AdventureWorks2012 geçerli veritabanı ve aşağıdaki sorgu yürütür:

SELECT FirstName, LastName FROM Person.Person;

Sadece planı kılavuzları AdventureWorks2012 veritabanı için bu sorgu eşlenmesi için uygun. Ancak, eğer AdventureWorks2012 geçerli veritabanı ve aşağıdaki deyimleri çalıştırılır:

USE DB1;

SELECT FirstName, LastName FROM Person.Person;

Sadece planı kılavuzları DB1bağlamında sorgu yürütülürken çünkü sorgu eşlenmesi uygundur DB1.

sql veya template tabanlı kılavuzları, plan için SQL Servereşleşen değerleri @ module_or_batch ve @ params bağımsız iki karakter değerleri karşılaştırarak bir sorgu. Bu metin size gerekir anlamına gelir tam olarak SQL Servergerçek toplu işleme alır.

Ne zaman @ türü = 'sql' ve @ module_or_batch için null değeri ayarlanır @ module_or_batch değerine ayarlanır @ stmt. Bu değeri anlamına statement_textaynı biçimde sağlanmalıdır karakteri karakterine, o gönderilir gibi SQL Server. İç dönüşüm yok, bu maçı kolaylaştırmak için gerçekleştirilir.

Normal (sql veya nesne) plan Kılavuzu ve şablon plan Kılavuzu bir beyanı uygulayabilirsiniz, sadece düzenli plan Kılavuzu kullanılır.

[!NOT]

Plan kılavuz oluşturmak istediğiniz deyimi içeren toplu bir kullanım içeremez databasedeyimi.

Plan önbelleği planı Kılavuzu etkisi

Bir plan Kılavuzu üzerinde modül oluşturma sorgu planı bu modül için planı önbellekten kaldırır. NESNE veya sql türü bir plan Kılavuzu üzerinde bir toplu işlem oluşturmak için aynı karma değerine sahip bir toplu iş sorgu planı kaldırır. Plan Kılavuzu türü template oluşturma tüm tek deyimli toplu o veritabanındaki planı önbellekten kaldırır.

ilişkili Görevler

Görev

Konu

Plan kılavuz oluşturmak açıklar.

Yeni Plan Kılavuzu oluşturma

Parametreleştirilmiş sorguları için bir plan kılavuz oluşturmak nasıl açıklar.

Parametreleştirilmiş sorguları için bir Plan Kılavuzu oluşturma

Plan kılavuzları kullanarak sorgu parameterization davranışı denetlemek nasıl açıklar.

Plan kılavuzları kullanarak sorgu Parameterization davranışı belirtme

Bir plan Kılavuzu sabit sorgu planı eklemek nasıl açıklar.

Sabit bir sorgu planı için bir Plan Kılavuzu uygulayın

Bir plan Kılavuzu sorgu ipuçları belirtmek nasıl açıklar.

Sorgu ipuçları eklemek için bir Plan Kılavuzu

Plan Kılavuzu özelliklerini açıklar.

Plan Kılavuzu özelliklerini görüntüleme

Oluşturmak ve planı kılavuzları sınamak için SQL Server Profiler'I kullanmayı açıklamaktadır.

Oluşturmak ve sınamak için SQL Server Profiler'I kullanma planı kılavuzları

Plan kılavuzları doğrulayın açıklar.

Plan kılavuzları yükseltmeden sonra doğrula

Ayrıca bkz.

Başvuru

sp_create_plan_guide (Transact-sql)

sp_create_plan_guide_from_handle (Transact-sql)

sp_control_plan_guide uygulanır (Transact-sql)

sys.plan_guides (Transact-sql)

sys.fn_validate_plan_guide (Transact-sql)