sys.fn_validate_plan_guide (Transact-SQL)

Platí na:SQL ServerAzureSQL Managed Instance

Ověřuje platnost uvedeného plánu. Funkce sys.fn_validate_plan_guide vrací první chybovou zprávu, která se objeví, když je plánovací průvodce aplikován na její dotaz. Prázdná sada řádků se vrátí, když je plánový průvodce platný. Plánové průvodce mohou být neplatné po změnách fyzického návrhu databáze. Například pokud plánovací průvodce specifikuje konkrétní index a tento index je následně vyřazen, dotaz již nebude moci plánovací průvodce používat.

Ověřením plánového průvodce můžete určit, zda může optimalizátor průvodce použít bez úprav. Na základě výsledků funkce se můžete rozhodnout plán guide opustit a dotaz znovu upravit nebo upravit návrh databáze, například znovuvytvořením indexu uvedeného v plánovém průvodci.

Transact-SQL konvence syntaxe

Syntax

sys.fn_validate_plan_guide ( plan_guide_id )  

Arguments

plan_guide_id
Je ID plánového průvodce, jak je uvedeno v sys.plan_guides katalogu. plan_guide_id je int bez výchozího nastavení.

Vrácená tabulka

Název sloupce Datový typ Description
msgnum int ID chybové zprávy.
severity tinyint Závažnost zprávy mezi 1 a 25.
stav smallint Číslo stavu chyby označující bod v kódu, kde chyba nastala.
zpráva nvarchar(2048) Zpráva o chybě.

Permissions

OBJECT-scoped plánovací průvodce vyžadují VIEW DEFINITION nebo ALTER oprávnění na odkazovaný objekt a oprávnění pro kompilaci dotazu nebo dávkového souboru, který je uveden v plánovém průvodci. Například pokud dávka obsahuje příkazy SELECT, jsou vyžadována oprávnění SELECT na odkazovaných objektech.

SQL nebo šablonové plánovací průvodce vyžadují ALTER povolení k databázi a oprávnění pro kompilaci dotazu nebo dávkového souboru uvedeného v plánu. Například pokud dávka obsahuje příkazy SELECT, jsou vyžadována oprávnění SELECT na odkazovaných objektech.

Remarks

Tato sys.fn_validate_plan_guide funkce není dostupná v Azure SQL Database.

Examples

A. Ověření všech plánovacích přírutek v databázi

Následující příklad ověřuje platnost všech plánovacích příruček v aktuální databázi. Pokud je vrácena prázdná množina výsledků, všechny plánové vodítka jsou platné.

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. Validace plánu testování před implementací změny v databázi

Následující příklad používá explicitní transakci k vyřazení indexu. Funkce sys.fn_validate_plan_guide se vykoná, aby zjistila, zda tato akce zneplatní jakékoli plánovací průvodce v databázi. Na základě výsledků funkce DROP INDEX je příkaz buď potvrzen, nebo je transakce vrácena zpět a index není vyřazen.

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