Rieseguire un piano di query effettivo specifico


7

Ho acquisito un piano di query effettivo per una query specifica.

Dopo questo ho cambiato alcune cose (incluso l'aggiornamento delle statistiche) e rieseguito quella specifica query. Ora il piano di query effettivo è diverso (il che ha senso).

La query ora funziona molto più velocemente. Sono curioso di sapere se il nuovo piano di esecuzione ha qualcosa a che fare con questo, perché anche altre modifiche (modifiche alla configurazione IO, impostazioni VM, riavvio dell'istanza sql, ecc.) Potrebbero causare il miglioramento delle prestazioni. Per verificarlo, vorrei eseguire nuovamente la query e provare a forzare SQL Server a utilizzare il vecchio piano di esecuzione.

Domanda : esiste un modo per rieseguire una query con un piano di esecuzione fornito dall'utente o persino eseguire una query direttamente da tale piano?

Ecco cosa ho provato a capire questo:

Quindi linea di fondo: è possibile? Se é cosi, come?


Ho usato quanto segue per controllare le query di lunga e breve esecuzione sui miei sistemi di sviluppo e test. Cancella quindi i piani, i buffer, le cache esistenti ed esegui le query con la traccia attiva. Utilizzo delle funzioni drop / free di dbcc per cancellare la sessione, la cache, i buffer, ecc. E impostare la traccia su off o off. Non correlato ma utile, è vedere quale sia l'accordo con i dati con la tabella. Nota che ho visto che stavi usando S2K12, quindi questi riferimenti dovrebbero corrispondere. Il comportamento può differire nelle versioni precedenti di SQL Server. Spero che sia di aiuto. DBCC FREESYSTEMCACHE, DROPCLEANBUFFERS, Trace On, show_statistics, ecc.
Ray Porrata,

Risposte:


10

Sì.

Hai bisogno del USE PLANsuggerimento.

In cui si fornisce il XMLdal primo piano.

SELECT *
FROM T
OPTION (USE PLAN N'<?xml version="1.0" encoding="utf-16"?> ....')

Sebbene non garantisca che il piano sarà esattamente lo stesso (ad esempio gli operatori di calcolo scalare possono spostarsi, ad esempio) sarà probabilmente piuttosto vicino.


Grazie, esattamente quello che stavo chiedendo. (Purtroppo mi lascia un nuovo problema: " Non è stato possibile trovare un piano di query perché l'ottimizzatore ha superato il numero di operazioni consentite durante la ricerca del piano specificato nel suggerimento USE PLAN. ", Ma questo è un altro problema da affrontare, immagino.)
Jeroen

@Jeroen - Hmmm. Non sono sicuro se ci sia qualche soluzione per quello. Forse c'è qualche flag di traccia che aumenterebbe quel limite, ma se c'è non lo so!
Martin Smith,

Nessun problema, grazie per il tuo aiuto in ogni caso: ho imparato qualcosa di nuovo oggi! : D
Jeroen,

@Jeroen - Forse TF 8780 non documentato che disabilita i timeout dell'ottimizzatore ? Non sono sicuro se ciò avrebbe l'effetto desiderato.
Martin Smith,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.