sys.fn_validate_plan_guide (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL Managed Instance

Verifieert de geldigheid van de gespecificeerde plangids. De sys.fn_validate_plan_guide functie geeft het eerste foutbericht terug dat wordt aangetroffen wanneer de plangids op zijn query wordt toegepast. Een lege rijset wordt teruggegeven wanneer de plangids geldig is. Plangidsen kunnen ongeldig worden nadat er wijzigingen zijn aangebracht in het fysieke ontwerp van de database. Als bijvoorbeeld een plangids een bepaalde index specificeert en die index vervolgens wordt verwijderd, kan de zoekopdracht de plangids niet langer gebruiken.

Door een plangids te valideren, kun je bepalen of de gids zonder aanpassing door de optimizer gebruikt kan worden. Op basis van de resultaten van de functie kun je besluiten de plangids te verwijderen en de query opnieuw af te stemmen, of het databaseontwerp te wijzigen, bijvoorbeeld door de index die in de plangids is gespecificeerd opnieuw te maken.

Transact-SQL syntaxis-conventies

Syntax

sys.fn_validate_plan_guide ( plan_guide_id )  

Arguments

plan_guide_id
Is de ID van de plangids zoals gerapporteerd in de catalogusweergave van de sys.plan_guides . plan_guide_id is int zonder standaard.

Tabel geretourneerd

Kolomnaam Gegevenstype Description
msgnum int Id van het foutbericht.
ernstigheid tinyint Ernstniveau van het bericht, tussen 1 en 25.
state smallint Statusnummer van de fout geeft aan welk punt in de code de fout is opgetreden.
message nvarchar(2048) Berichttekst van de fout.

Permissions

OBJECT-scoped plangidsen vereisen VIEW DEFINITION- of ALTER-toestemming voor het gerefereerde object en rechten om de query of batch die in de plangids wordt verstrekt samen te stellen. Als een batch bijvoorbeeld SELECT-instructies bevat, zijn SELECT-rechten vereist voor de gerefereerde objecten.

SQL- of TEMPLATE-scoped plangidsen vereisen ALTER-toestemming op de database en rechten om de query of batch die in de plangids wordt verstrekt te compileren. Als een batch bijvoorbeeld SELECT-instructies bevat, zijn SELECT-rechten vereist voor de gerefereerde objecten.

Remarks

De sys.fn_validate_plan_guide functie is niet beschikbaar in Azure SQL Database.

Examples

A. Het valideren van alle plangidsen in een database

Het volgende voorbeeld controleert de geldigheid van alle plangidsen in de huidige database. Als een lege resultaatset wordt teruggegeven, zijn alle plangidsen geldig.

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. Testplan-gids validatie voordat een wijziging in de database wordt geïmplementeerd

Het volgende voorbeeld gebruikt een expliciete transactie om een index te verwijderen. De sys.fn_validate_plan_guide functie wordt uitgevoerd om te bepalen of deze actie plangidsen in de database ongeldig maakt. Op basis van de resultaten van de functie wordt de DROP INDEX instructie ofwel gecommitteerd of wordt de transactie teruggedraaid, en wordt de index niet verwijderd.

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  

Zie ook

Planhandleidingen
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)