La colonna bloccata nella tabella sysprocesses è popolata per le attese di latch

In questo articolo viene illustrato che la colonna bloccata nella sysprocesses tabella viene popolata per le attese di latch.

Versione originale del prodotto:   SQL Server
Numero KB originale:   906344

Riepilogo

In SQL Server, è possibile notare che la colonna bloccata nella sysprocesses tabella di sistema viene popolata per le attese di latch oltre alle attese di blocco. A volte, è possibile che si verifichino brevi periodi di tempo in cui un singolo ID processo del server (SPID) viene segnalato come blocco stesso. Questo comportamento è previsto.

Ulteriori informazioni

I latch vengono utilizzati per sincronizzare l'accesso alle pagine di dati memorizzate nella cache e ad altri oggetti in memoria. In genere, i latch vengono mantenuti solo brevemente e i tempi di attesa di latch sono di dimensioni ridotte. SQL Server dispone di una diagnostica che consente di risolvere i casi in cui uno SPID attende molto tempo per un latch. Tali diagnostica determinano che la colonna bloccata della sysprocesses tabella di sistema rifletta il proprietario di un latch che blocca la richiesta di latch di un altro SPID.

La proprietà latch viene rilevata solo per le latch che si trovano in modalità esclusiva (EX) o di aggiornamento (UP). La proprietà non viene rilevata per i latch che si trovano in modalità condivisa (SH) latch. Questo significa che la colonna bloccata non verrà popolata per alcune richieste di latch.

La maggior parte delle volte, è possibile ignorare il valore nella colonna bloccata se sono soddisfatte le condizioni seguenti:

  • Il valore nella waittime colonna è basso.
  • Lo waittype SPID è un waittype latch.

Per ulteriori informazioni sui possibili valori nella waittype colonna, vedere sys.dm_os_wait_stats (Transact-SQL).

Quando uno SPID è in attesa di un latch di pagina I/O, è possibile notare che la colonna bloccata segnala brevemente che lo SPID si sta bloccando. Questo comportamento è un effetto collaterale della modalità di utilizzo dei latch per le operazioni di I/O nelle pagine di dati. Quando un thread invia una richiesta di I/O, lo SPID che rilascia la richiesta di I/O acquisisce un latch nella pagina. Tutte le operazioni di I/O di SQL Server sono asincrone. Di conseguenza, lo SPID tenterà di acquisire un altro latch nella stessa pagina se lo SPID che ha emesso la richiesta di I/O deve attendere il completamento della richiesta. Questo secondo latch è bloccato dal primo latch. Di conseguenza, la colonna bloccata segnala che lo SPID si sta bloccando. Quando viene completata la richiesta di I/O, viene rilasciato il primo latch. Viene quindi concessa la seconda richiesta di latch.

Ad esempio, è possibile che si verifichino le seguenti condizioni:

  1. SPID 55 desidera leggere una pagina di dati che non esiste nel pool di buffer.

  2. SPID 55 acquisisce un latch EX nella pagina. Poiché la pagina non esiste ancora in memoria, la modalità di latch richiesta è EX. La modalità EX latch forza altri SPID che potrebbero anche voler accedere alla pagina per attendere la fine della richiesta di I/O. La modalità EX latch impedisce anche ad altri SPID di emettere una richiesta di I/O duplicati per la stessa pagina.

  3. SPID 55 rilascia la richiesta di I/O per leggere la pagina da disco.

  4. Poiché SPID 55 desidera leggere la pagina, SPID 55 deve attendere la fine della richiesta di I/O. Per attendere la fine della richiesta di I/O, SPID 55 tenta di acquisire un altro latch con la modalità di latch condivisa (SH) sulla stessa pagina. Poiché un EX latch è già stato acquisito, la richiesta di latch SH è bloccata e lo SPID è sospeso. Poiché il latch EX che blocca la richiesta di latch SH è stato acquisito anche da SPID 55, lo SPID viene segnalato temporaneamente come blocco stesso.

  5. Quando viene completata la richiesta di I/O, viene rilasciato l'EX latch della pagina.

  6. La versione del latch EX fornisce il latch SH a SPID 55.

  7. SPID 55 è ora in grado di leggere la pagina.

Tra il passaggio 4 e il passaggio 5, la sysprocesses tabella indica che SPID 55 è bloccato da solo insieme a un waittype di PAGEIOLATCH_ XX. In questo waittype, XX può essere SH, up o ex. Questo comportamento indica che SPID 55 ha emesso una richiesta di I/O e che SPID 55 è in attesa del completamento della richiesta di I/O.