Principale utente con più risposte
Piani di esecuzione multipli

Domanda
-
Ciao a tutti,
vorrei un consiglio su come affrontare il caso in cui l'interrogazione di una stored procedure (contenente funzioni tabellari) via SSMS impiega circa 4-6 secondi mentre via "web" (quindi forse altro provider/driver) generi un tempo di esecuzione molto maggiore di oltre 30 secondi.
Abbiamo provato a rifare l'ALTER della funzione tabellare e questo può sistemare solo "momentaneamente" le differenze.
Alla fine Abbiamo messo una pezza aggiungendo "with recompile" alla stored procedure e in questo modo la situazione si è uniformata.
Avrei bisogno di individuare, tramite query "sys." ai piani di esecuzione, una la situazione simile in cui il database usa differenti piani di esecuzione e qual è il sistema corretto per correggere il problema.
Grazie a tutti
Saluti
- Modificato Crazygalateo giovedì 10 febbraio 2022 09:21
Risposte
-
Le funzioni tabellari sono prive di statistiche e quindi i piani di esecuzione che le coinvolgono difficilmente risultano ottimi.
Visti i tempi di esecuzione che riporti, potrebbe essere percorribile la strada che consiste nel persistere i suoi dati in una temp table, crearvi un indice opportuno e usarla in luogo della funzione.
Sempre che il problema non sia altrove: sarebbe utile vedere il codice della stored in questione.
ciao
Giorgio
- Proposto come risposta Nikola KochmalarskiMicrosoft contingent staff lunedì 14 febbraio 2022 08:10
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator martedì 15 febbraio 2022 09:11
Tutte le risposte
-
Le funzioni tabellari sono prive di statistiche e quindi i piani di esecuzione che le coinvolgono difficilmente risultano ottimi.
Visti i tempi di esecuzione che riporti, potrebbe essere percorribile la strada che consiste nel persistere i suoi dati in una temp table, crearvi un indice opportuno e usarla in luogo della funzione.
Sempre che il problema non sia altrove: sarebbe utile vedere il codice della stored in questione.
ciao
Giorgio
- Proposto come risposta Nikola KochmalarskiMicrosoft contingent staff lunedì 14 febbraio 2022 08:10
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator martedì 15 febbraio 2022 09:11
-
Ciao,
il with(recompile) non risolve il problema, fa cambiare il piano di esecuzione per un certo periodo di tempo. Però dopo qualche azione che ancora non ho capito (ricostruzione indici, backup, statistiche etc) ritorna tutto come prima.
Per questo nella funzione ho inserito delle tabelle temporanee @tab che permettono la costruzione di una query in cui le tabelle sono "minime" e per cui non sono più possibili errori legati al motore di esecuzione/indici.
Ciao
- Proposto come risposta Nikola KochmalarskiMicrosoft contingent staff martedì 8 marzo 2022 20:10