2013-07-23 6 views
39

Sto provando a risolvere alcuni rallentamenti intermittenti nella nostra applicazione. Ho una domanda separata here con ulteriori dettagli.Che cosa significa uno stato di "Suspended" e alto DiskIO da sp_who2?

Ho eseguito sp_who2 e ho notato alcune connessioni con stato SUSPENDED e alto DiskIO. Qualcuno può spiegarmi cosa indica?

enter image description here

+0

Vedere anche [Come scoprire perché lo stato di uno spid è sospeso? Quali risorse lo spid sta aspettando?] (Http://stackoverflow.com/questions/22038695/how-to-find-out-why-the-status-of-a-spid-is-suspended- who-resources- the-spid-i) – Vadzim

risposta

42

Questa è una domanda molto ampia, quindi ho intenzione di dare una risposta ampia.

  1. Una query viene sospesa quando richiede l'accesso a una risorsa che al momento non è disponibile. Questa può essere una risorsa logica come una riga bloccata o una risorsa fisica come una pagina di dati di memoria. La query inizia di nuovo a funzionare, una volta che la risorsa diventa disponibile.  
  2. IO su disco alto significa che è necessario accedere a molte pagine di dati per soddisfare la richiesta.

Questo è tutto ciò che posso dire dallo screenshot qui sopra. Tuttavia, se dovessi speculare, probabilmente hai un sottosistema di I/O troppo lento per tenere il passo con la domanda. Ciò potrebbe essere causato da indici mancanti o da un disco effettivamente troppo lento. Tieni presente che le letture di 15000 per una singola query OLTP sono leggermente elevate ma non insolite.

+1

Se la causa è un blocco, non dovrebbe comparire in 'BlkBy' o' blocking_session_id'? –

+1

Corretto, @JonofAllTrades. Se il processo A sta tentando di accedere a una risorsa bloccata dal processo B, l'ID di sessione di B verrà visualizzato nella colonna blocking_process_id di A. –

17

sospeso. La sessione è in attesa di un evento, come I/O, da completare.

http://msdn.microsoft.com/en-us/library/ms174313.aspx

+2

Che si traduce nel disco in cui il database è attivo viene utilizzato pesantemente (dal database stesso o da altro software sul server) e il database deve attendere in coda per il proprio turno per accedere all'unità. –

+0

Questo è quello che sto cercando. Questi numeri sono considerati alti per I/O? – NullReference

+0

Come ho detto nella mia risposta, questa interpretazione è in realtà una speculazione in quanto la tua schermata non rivela ciò che la query sta effettivamente aspettando. Le letture di 15 KB per una query OLTP sono leggermente elevate ma non fuori intervallo. –