Aracılığıyla paylaş


sp_create_plan_guide_from_handle (Transact-SQL)

Bir sorgu planı plan önbelleğindeki bir veya daha fazla plan kılavuzları oluşturur.Bu saklı yordam, sorgu iyileştiricisi için belirtilen sorgu her zaman belirli bir sorgu planına kullanır emin olmak için kullanabilirsiniz.Plan kılavuzları hakkında daha fazla bilgi için bkz: Plan Kılavuzları'nı anlama.

Topic link iconTransact-SQL sözdizimi kuralları

sp_create_plan_guide_from_handle [ @name = ] N'plan_guide_name'
    , [ @plan_handle = ] plan_handle
    , [ [ @statement_start_offset = ] { statement_start_offset | NULL } ]

Bağımsız değişkenler

  • [adı =] N ' plan_guide_name'
    Plan kılavuzu adıdır.Plan guide names are scoped to the current database.plan_guide_name must comply with the rules for identifiers and cannot start with the number sign (#).En fazla uzunluğu plan_guide_name 124 karakter olabilir.

  • [plan_handle =] plan_handle
    Identifies a batch in the plan cache.plan_handle is varbinary(64).plan_handle can be obtained from the sys.dm_exec_query_stats dynamic management view.

  • [statement_start_offset =] { statement_start_offset | null}]
    Identifies the starting position of the statement within the batch of the specified plan_handle.statement_start_offset is int, with a default of NULL.

    Bildirimi mahsup hesabı statement_start_offset sütuna karşılık gelen sys.dm_exec_query_stats dinamik yönetimi görüntüleyin.

    NULL belirtilirse veya deyim mahsup hesabı belirtilmemiş bir plan kılavuzu içindeki sorgu planı için belirtilen planı tanıtıcı kullanarak toplu iş her tablo için oluşturulur.Belirli bir plan kullanımını zorlamak için PLAN KULLANÝN sorgu ipucu kullandığınız kılavuzları planlamak için oluşturulan planı kılavuzları eşdeğerdir.

Remarks

Bir plan kılavuzu türleri için deyim oluşturulamaz.Bir deyimde bir toplu iş için bir plan kılavuzu oluşturulamıyor, saklı yordam deyim yoksayar ve toplu sonraki deyimde devam eder.Bir deyim aynı toplu iş iş iş, birden çok kez oluşursa, plan son oluşumu için etkinleştirilir ve önceki planları raporu için devre dışı bırakılır.Hiçbir toplu iş iş deyimlerinde kullanılabilir, bir plan kılavuzu 10532 hata ortaya çıkar ve ifade başarısız.Plan tanıtıcı her zaman bu hata olasılığını önlemek için sys.dm_exec_query_stats dinamik yönetimi görünümünden elde öneririz.

Security noteSecurity Note:

sp_create_plan_guide_from_handle planı önbelleğinde göründükleri gibi planlarını temel alarak planı kılavuzları oluşturur.Toplu iş metin, yani Transact-SQL karakter (sorguya geçirilen tüm hazır bilgi değerleri de dahil olmak üzere) karakter, ifadeler ve XML gösterim planı alınır sonuç içine planı önbelleğinden plan kılavuzu. Bu metin dizeleri, sonra veritabanının meta verilerde depolanan önemli bilgileri içerebilir.Uygun izinlere sahip kullanıcılar sys.plan_guides katalog görünümünü kullanarak, bu bilgileri görüntüleyebilir ve Plan kılavuzu özellikleri iletişim kutusundaSQL Server Management Studio. Önemli bilgileri bir plan kılavuzu bildirilen emin olmak için , planı önbelleğinden oluşturulan planı kılavuzları gözden geçirme öneririz.

Plan kılavuzlar için birden çok ifadeler içinde bir sorgu planı oluşturma

Sp_create_plan_guide gibi hedeflenen bir toplu iş veya modül için sorgu planı plan önbelleğinden sp_create_plan_guide_from_handle ortadan kaldırır.Bu, tüm kullanıcıların yeni'yi kullanmaya başlamak sağlamak için yapılır plan kılavuzu.Bir tek bir sorgu planı içinde birden çok ifadeleri plan kılavuzu oluştururken, içinde açık bir hareketi planı kılavuzları oluşturarak planı kaldırılmasını önbellekten erteleyebilirsiniz.Bu yöntem, işlem tamamlanıncaya kadar önbelleğe ve belirtilen her biri için bir plan kılavuzu kalmasını planı sağlar deyim oluşturulur.Örnek B'ye bakın

İzinler

VIEW_SERVER_STATE iznine gerek duyar.Buna ek olarak, tek tek her biri için gereken izinlerdir plan kılavuzu sp_create_plan_guide_from_handle kullanılarak oluşturulur.Oluşturulacak bir plan kılavuzu türü OBJECT başvurulan nesne ALTER izni gerektirir.Bir planı kılavuz türü oluşturmak için geçerli veritabanında ALTER iznine SQL veya TEMPLATE gerektirir.Oluşturulacak plan kılavuzu türünü belirlemek için , aşağıdaki sorguyu çalıştırın:

SELECT cp.plan_handle, sql_handle, st.text, objtype 
FROM sys.dm_exec_cached_plans AS cp
JOIN sys.dm_exec_query_stats AS qs ON cp.plan_handle = qs.plan_handle
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS st;

Plan kılavuzu oluşturma deyim içeren satırın inceleyin objtype sonuç sütunu küme. Değeri Proc plan kılavuzu NESNE türünü belirtir. Gibi diğer değerleri AdHoc veya Prepared plan kılavuzu SQL türünü belirtin.

Örnekler

C.Bir plan kılavuzu planı önbelleğindeki bir sorgu planı oluşturma

Aşağıdaki örnek, bir sorgu planı plan önbelleğinden belirterek bir plan kılavuzu için tek bir deyim oluşturur.Basit yürüterek örnek başlar. SELECT deyim plan kılavuzu oluşturulur. Bu sorgu için plan kullanarak incelenir sys.dm_exec_sql_text ve sys.dm_exec_text_query_plan dinamik yönetimi görünümleri. Plan kılavuzu için sorgu planı önbelleğindeki sorgusu ile ilişkili olan sorgu planını belirterek sonra oluşturulur.Son örnekte deyim plan Kılavuzu'nın var olduğunu doğrular.

b.Birden çok plan kılavuzu için çoklu deyimli bir toplu iş oluşturma

Aşağıdaki örnek, çoklu deyimli bir toplu iş içinde iki deyim için bir plan kılavuzu oluşturur.Böylece, ilk plan kılavuzu oluşturulduktan sonra toplu iş iş iş için sorgu planı plan önbelleğinden kaldırılır planı kılavuzları belirtik işlem içinden oluşturulur.Örneğin, çoklu deyimli bir toplu iş yürütülerek başlar.Toplu iş için plan dinamik yönetimi görünümleri kullanarak incelenir.toplu iş iş iş, her tablo için bir satır döndürdü dikkat edin.Bir plan kılavuzu sonra toplu iş birinci ve üçüncü tablolarda belirterek oluşturulduğu @statement\_start\_offset parametre. Son örnekte deyim planı Kılavuzları'nın var olduğunu doğrular.