sys.fn_validate_plan_guide (Transact-SQL)
Verifica la validità della guida di piano specificata. La funzione sys.fn_validate_plan_guide 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.
Sintassi
sys.fn_validate_plan_guide ( plan_guide_id )
Argomenti
- plan_guide_id
ID della guida di piano come riportato nella vista del catalogo sys.plan_guides. plan_guide_id è di tipo int senza alcun valore predefinito.
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. |
message |
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.
Esempi
A. 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 AdventureWorks2008R2;
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. Viene eseguita la funzione sys.fn_validate_plan_guide per determinare se l'azione invaliderà ogni guida di piano contenuta 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 AdventureWorks2008R2;
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
Vedere anche