Ho un problema simile con uno script che chiama un numero di UDF che ho creato. Di solito, le UDF eseguono la sottocoda sotto SSMS. Allo stesso modo, l'esecuzione dei report che genera con loro è sopportabile con SSMS (dati 30d in 8s, dati 365d in 22s). Ho sempre fatto NOCOUNT ON con i miei processi di SQL Agent poiché normalmente generano file di testo per essere prelevati da altri processi o da Excel e non voglio i dati extra alla fine, quindi non è stata una soluzione per me.
In questo caso, quando eseguiamo esattamente lo stesso script in SQL Agent come lavoro, i miei tempi crescono esponenzialmente. Il mio script 8s richiede 2m30s e il mio script 22s richiede 2h20m. È lo stesso se lo eseguo a mezzogiorno con altre attività utente e lavori o dopo ore senza attività dell'utente, né lavori o backup in esecuzione. Il nostro server è inattivo e nel migliore dei casi ottengo uno degli 8 core utilizzati durante l'esecuzione. DB è solo di circa 10 GB in esecuzione su SSD con una scheda RAID in cache e 16 di 32 GB di RAM sono gratuiti. Dal momento che il mio SQL funziona in modo efficiente in SSMS, sono abbastanza convinto che sto raggiungendo un limite di threading di qualche tipo. Ho cercato e provato a regolare MAXDOP appena prima degli script nell'agente SQL senza fortuna.
Poiché si tratta di un'attività che desidero pianificare, è necessario automatizzarla in un modo o nell'altro. Potrei lasciare che questi script prendano le ore di cui hanno bisogno per essere eseguiti come passi SQL nei processi di SQL Agent, ma ho deciso di eseguire da riga di comando e ottengo le stesse prestazioni che vedo in SSMS.
sqlcmd -S SQLSRVRHost -i "C:\My Script Loc With Spaces.sql" -v MyVar="VarValue" >"C:\MyOutputFile.txt"
Quindi ho creato uno script batch con i processi SQL eseguiti da sqlcmd. Quindi eseguo lo script batch da un processo di SQL Agent, quindi ho ancora la stessa gestione e controllo. I miei 4 lavori SQL che hanno richiesto più di 3 ore per essere eseguiti completi in 1 minuto e pochi secondi da un singolo script batch eseguito da SQL Agent.
Spero che questo aiuta ...
fonte
2014-08-07 14:32:57
Se si esegue lo stesso SP in SSMS e funziona, è possibile che un'impostazione del lavoro sia cambiata, ad es. è eseguito sul databse sbagliato. In caso contrario, controllare Monitoraggio attività su cosa sta facendo l'agente o avviare una traccia per ottenere i comandi eseguiti. forse ci sono problemi di blocco. Il problema si verifica ancora se si esegue manualmente il lavoro? –
@ Bernard, Grazie per la risposta. Ho controllato il lavoro e l'ho ricreato. Ancora lo stesso problema. Sì, se eseguo manualmente il lavoro ci vuole ancora un sacco di tempo – Prateek
@Preteek puoi pubblicare le impostazioni del lavoro? L'unica ragione per cui posso pensare a questo comportamento è un'esecuzione diversa dell'SP. Poiché i parametri ecc. Sono gli stessi di quando eseguiti manualmente, SQLServer dovrebbe usare gli stessi piani di esecuzione, ecc. Forse si può dare un'occhiata al log SQL - forse questo ci darà un suggerimento. –