Aracılığıyla paylaş


sp_control_plan_guide (Transact-SQL)

Şunlar için geçerlidir: SQL Server

Sistemde saklanan prosedür, sp_control_plan_guide bir plan rehberini düşürmek, etkinleştirmek veya devre dışı bırakmak için kullanılır.

Transact-SQL söz dizimi kuralları

Sözdizimi

sp_control_plan_guide
    [ @operation = ] { N'DROP [ ALL ]' | N'DISABLE [ ALL ]' | N'ENABLE [ ALL ]' }
    [ , [ @name = ] N'name' ]
[ ; ]

Arguments

[ @name = ] ‘name

Bırakılan, etkinleştirilen veya devre dışı bırakılan plan rehberini belirtir. @namesysname'dir, varsayılan olarak .NULL @name mevcut veritabanına çözülür. Belirtilmediyse, @name varsayılan olarak .NULL

[ @operation = ] { N'DROP [ HEPSI ]' | N'DEVRE DıŞı BıRAK [ HEPSI ]' | N'ENABLE [ HEPSI ]' }

@name'de belirtilen plan rehberine göre gerçekleştirilecek işlem. @operationnvarchar(60)'dır ve varsayılan yoktur.

  • DROP

    @name tarafından belirtilen plan rehberini düşürür. Bir plan rehberi bırakıldıktan sonra, plan rehberiyle eşleştirilen bir sorgunun gelecekteki yürütmeleri plan rehberinden etkilenmez.

  • DROP ALL

    Tüm plan rehberlerini mevcut veritabanına bırakıyor. @name ne DROP ALL zaman belirtildiği belirtilemez.

  • DISABLE

    @name tarafından belirtilen plan rehberini devre dışı bırakır. Bir plan rehberi devre dışı bırakıldıktan sonra, plan rehberiyle eşleştirilen bir sorgunun gelecekteki yürütülmeleri plan rehberinden etkilenmez.

  • DISABLE ALL

    Mevcut veritabanındaki tüm plan rehberlerini devre dışı bırakıyor. @name ne DISABLE ALL zaman belirtildiği belirtilemez.

  • ENABLE

    @name tarafından belirtilen plan rehberini etkinleştirir. Bir plan rehberi, etkinleştirildikten sonra uygun bir sorgu ile eşleştirilebilir. Varsayılan olarak, plan rehberleri oluşturuldukları anda etkinleştirilir.

  • ENABLE ALL

    Mevcut veritabanındaki tüm plan rehberlerini etkinleştiriyor. @name ne ENABLE ALL zaman belirtildiği belirtilemez.

Açıklamalar

Plan rehberinde referans verilen bir fonksiyonu, depolanmış prosedürü veya DML tetikleyicisini kaldırmaya veya değiştirmeye çalışmak, etkinleştirilmiş veya devre dışı bırakılmış bir hata oluşturur.

Devre dışı bırakılmış bir plan rehberini devre dışı bırakmak veya etkinleştirilmiş bir plan rehberini etkinleştirmek hiçbir etkisi yaratmaz ve hatasız çalışır.

Plan rehberleri SQL Server'ın her sürümünde mevcut değil. SQL Server sürümleri tarafından desteklenen özelliklerin listesi için bkz. Sürümleri ve SQL Server 2022'nin desteklenen özellikleri. Ancak, herhangi bir SQL Server sürümünde veya DROP ALL seçeneğiyle çalıştırabilirsiniz.sp_control_plan_guideDROP

Permissions

Bir tür OBJECT plan rehberinde (belirlenen @type = '<object>'şekilde oluşturulan) bir plan rehberinde çalıştırmaksp_control_plan_guide, plan rehberinde referans verilen nesneye izin gerektirirALTER. Diğer tüm plan rehberleri için izin gereklidir ALTER DATABASE .

Örnekler

A. Plan rehberini etkinleştir, devre dışı bırak ve bırak

Aşağıdaki örnek bir plan rehberi oluşturur, onu devre dışı bırakır, etkinleştirir ve düşürür.

--Create a procedure on which to define the plan guide.
IF OBJECT_ID(N'Sales.GetSalesOrderByCountry', N'P') IS NOT NULL
    DROP PROCEDURE Sales.GetSalesOrderByCountry;
GO

CREATE PROCEDURE Sales.GetSalesOrderByCountry (@Country NVARCHAR(60))
AS
BEGIN
    SELECT *
    FROM Sales.SalesOrderHeader AS h
    INNER JOIN Sales.Customer AS c
        ON h.CustomerID = c.CustomerID
    INNER JOIN Sales.SalesTerritory AS t
        ON c.TerritoryID = t.TerritoryID
    WHERE t.CountryRegionCode = @Country;
END
GO

--Create the plan guide.
EXECUTE sp_create_plan_guide N'Guide3',
    N'SELECT *
    FROM Sales.SalesOrderHeader AS h
    INNER JOIN Sales.Customer AS c
        ON h.CustomerID = c.CustomerID
    INNER JOIN Sales.SalesTerritory AS t
        ON c.TerritoryID = t.TerritoryID
    WHERE t.CountryRegionCode = @Country',
    N'OBJECT',
    N'Sales.GetSalesOrderByCountry',
    NULL,
    N'OPTION (OPTIMIZE FOR (@Country = N''US''))';
GO

--Disable the plan guide.
EXECUTE sp_control_plan_guide N'DISABLE',
    N'Guide3';
GO

--Enable the plan guide.
EXECUTE sp_control_plan_guide N'ENABLE',
    N'Guide3';
GO

--Drop the plan guide.
EXECUTE sp_control_plan_guide N'DROP',
    N'Guide3';
GO

B. Mevcut veritabanındaki tüm plan rehberlerini devre dışı bırak

Aşağıdaki örnek, veritabanındaki AdventureWorks2025 tüm plan rehberlerini devre dışı bırakır.

USE AdventureWorks2022;
GO

EXECUTE sp_control_plan_guide N'DISABLE ALL';