Ho una procedura memorizzata che scade follemente ogni volta che viene chiamata dall'applicazione web.
Ho avviato Sql Profiler e ho tracciato le chiamate in quel momento e finalmente ho scoperto queste cose:
- Quando vengono eseguite le istruzioni dall'interno di MS SQL Management Studio, con gli stessi argomenti (in effetti, ho copiato la chiamata alla procedura dalla traccia del profilo sql e l'ho eseguita): termina in 5 ~ 6 secondi in media.
- Ma quando viene chiamato dall'applicazione web, impiega più di 30 secondi (in traccia), quindi la mia pagina web va effettivamente in timeout per allora.
A parte il fatto che la mia applicazione web ha il proprio utente, ogni cosa è uguale (stesso database, connessione, server ecc.) Ho anche provato a eseguire la query direttamente in studio con l'utente dell'applicazione web e non ci vogliono più di 6 sec.
Come faccio a sapere cosa sta succedendo?
Presumo che non abbia nulla a che fare con il fatto che utilizziamo i livelli BLL> DAL o gli adattatori di tabella poiché la traccia mostra chiaramente il ritardo nella procedura effettiva. Questo è tutto quello a cui riesco a pensare.
MODIFICA Ho scoperto in questo collegamento che ADO.NET è impostato ARITHABORT
su true, il che è buono per la maggior parte del tempo, ma a volte questo accade e la soluzione suggerita è aggiungere with recompile
un'opzione al processo memorizzato. Nel mio caso non funziona ma sospetto che sia qualcosa di molto simile a questo. Qualcuno sa cos'altro fa ADO.NET o dove posso trovare le specifiche?