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)