sys.fn_validate_plan_guide (Transact-SQL)

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

Belirtilen plan rehberinin geçerliliğini doğrular. Fonksiyon, sys.fn_validate_plan_guide plan rehberi sorgusuna uygulandığında karşılaşılan ilk hata mesajını döndürür. Plan rehberi geçerli olduğunda boş bir satır seti döner. Plan rehberleri, veritabanının fiziksel tasarımında yapılan değişiklikler yapıldıktan sonra geçersiz hale gelebilir. Örneğin, bir plan rehberi belirli bir indeks belirtir ve o indeks sonradan düşürülürse, sorgu artık plan rehberini kullanamaz.

Bir plan rehberini doğrulayarak, kılavuzun optimizer tarafından değişiklik yapılmadan kullanılıp kullanılamayacağını belirleyebilirsiniz. Fonksiyonun sonuçlarına dayanarak, plan rehberini bırakıp sorguyu yeniden ayarlamaya veya veritabanı tasarımını değiştirmeye karar verebilirsiniz; örneğin, plan rehberinde belirtilen indeks yeniden oluşturulabilir.

Transact-SQL söz dizimi kuralları

Syntax

sys.fn_validate_plan_guide ( plan_guide_id )  

Arguments

plan_guide_id
sys.plan_guides katalog görünümünde bildirildiği plan rehberinin kimliği mi? plan_guide_id varsayılan olmayan bir int şeklindedir.

Döndürülen Tablo

Sütun adı Veri türü Description
msgnum int Hata mesajının kimliği.
severity tinyint Mesajın şiddet seviyesi, 1 ile 25 arasında.
state smallint Hatanın durum numarası, hatanın gerçekleştiği kod noktasını gösterir.
message nvarchar(2048) Hata mesajı.

Permissions

NESNE kapsamlı plan rehberleri, referans edilen nesne üzerinde DEFINITION veya ALTER izni ve plan rehberinde sunulan sorgu veya toplu derlemek için izinler gerektirir VIEW . Örneğin, bir toplu SELECT ifadeleri içeriyorsa, referans alınan nesneler üzerinde SELECT izinleri gereklidir.

SQL veya TEMPLATE kapsamlı plan rehberleri, veritabanında ALTER izni ve plan rehberinde sunulan sorgu veya toplu derleme izinleri gerektirir. Örneğin, bir toplu SELECT ifadeleri içeriyorsa, referans alınan nesneler üzerinde SELECT izinleri gereklidir.

Remarks

Bu sys.fn_validate_plan_guide fonksiyon Azure SQL Veritabanı'de mevcut değildir.

Examples

A. Tüm plan rehberlerinin bir veritabanında doğrulanması

Aşağıdaki örnek, mevcut veritabanındaki tüm plan rehberlerinin geçerliliğini kontrol etmektedir. Boş bir sonuç kümesi dönerse, tüm plan rehberleri geçerlidir.

USE AdventureWorks2022;  
GO  
SELECT plan_guide_id, msgnum, severity, state, message  
FROM sys.plan_guides  
CROSS APPLY fn_validate_plan_guide(plan_guide_id);  
GO  

B. Test planı rehberi, veritabanında değişiklik uygulamadan önce doğrulama

Aşağıdaki örnek, bir endeksi düşürmek için açık bir işlem kullanır. Bu fonksiyon, sys.fn_validate_plan_guide bu işlemin veritabanındaki plan rehberlerini geçersiz kılıp çıkarmayacağını belirlemek için yürütülür. Fonksiyonun sonuçlarına göre, ifade DROP INDEX ya taahhüt edilir ya da işlem geri alınır ve endeks düşürülmez.

USE AdventureWorks2022;  
GO  
BEGIN TRANSACTION;  
DROP INDEX IX_SalesOrderHeader_CustomerID ON Sales.SalesOrderHeader;  
-- Check for invalid plan guides.  
IF EXISTS (SELECT plan_guide_id, msgnum, severity, state, message  
           FROM sys.plan_guides  
           CROSS APPLY sys.fn_validate_plan_guide(plan_guide_id))  
    ROLLBACK TRANSACTION;  
ELSE  
    COMMIT TRANSACTION;  
GO  

Ayrıca Bkz.

Plan Kılavuzları
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)