Condividi tramite


sys.fn_validate_plan_guide (Transact-SQL)

Si applica a: SQL Server Istanza gestita di SQL di Azure

Verifica la validità della guida di piano specificata. La sys.fn_validate_plan_guide funzione restituisce il primo messaggio di errore rilevato quando la guida di piano viene applicata alla query. Se la guida di piano è valida viene restituito un set di righe vuoto. Le guide di piano possono diventare non valide dopo aver apportato modifiche alla progettazione fisica del database. Ad esempio, se una guida di piano specifica un particolare indice che viene successivamente eliminato, la query non sarà più in grado di utilizzare la guida di piano.

Convalidando una guida di piano, è possibile determinare se la guida può essere utilizzata dall'ottimizzatore senza modifiche. In base ai risultati della funzione, è possibile decidere di eliminare la guida di piano e regolare la query oppure modificare la progettazione del database, ad esempio ricreando l'indice specificato nella guida di piano.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sys.fn_validate_plan_guide ( plan_guide_id )  

Argomenti

plan_guide_id
ID della guida di piano come indicato nella vista del catalogo sys.plan_guides . plan_guide_id è int senza impostazione predefinita.

Tabella restituita

Nome colonna Tipo di dati Descrizione
msgnum int ID del messaggio di errore.
severity tinyint Livello di gravità del messaggio, compreso tra 1 e 25.
state smallint Numero di contesto dell'errore indicante il punto nel codice in cui si è verificato l'errore.
messaggio nvarchar(2048) Testo del messaggio di errore.

Autorizzazioni

Le guide di piano definite a livello di ambito di OBJECT richiedono l'autorizzazione VIEW DEFINITION o ALTER nell'oggetto a cui si fa riferimento e autorizzazioni per compilare la query o il batch forniti nella guida di piano. Ad esempio, se un batch contiene istruzioni SELECT, sono richieste autorizzazioni SELECT per gli oggetti a cui si fa riferimento.

Le guide di piano definite a livello di ambito di SQL o TEMPLATE richiedono l'autorizzazione ALTER per il database e autorizzazioni per compilare la query o il batch forniti nella guida di piano. Ad esempio, se un batch contiene istruzioni SELECT, sono richieste autorizzazioni SELECT per gli oggetti a cui si fa riferimento.

Osservazioni:

La sys.fn_validate_plan_guide funzione non è disponibile in database SQL di Azure.

Esempi

R. Convalida di tutte le guide di piano in un database

Nell'esempio seguente viene verificata la validità di tutte le guide di piano nel database corrente. Se viene restituito un set di risultati vuoto, sono valide tutte le guide di piano.

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 della convalida della guida di piano prima di implementare una modifica nel database

Nell'esempio seguente viene utilizzata una transazione esplicita per eliminare un indice. La sys.fn_validate_plan_guide funzione viene eseguita per determinare se questa azione invaliderà le guide di piano nel database. In base ai risultati della funzione, viene eseguito il commit dell'istruzione DROP INDEX o il rollback della transazione, l'indice non viene eliminato.

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  

Vedi anche

Guide di piano
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)