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

Questo articolo introduce 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 tabella di sysprocesses sistema viene popolata per attese di latch oltre alle attese di blocco. In alcuni casi, è possibile notare brevi periodi di tempo quando viene segnalato un singolo ID processo server (SPID) come blocco. Questo comportamento è previsto.

Ulteriori informazioni

I latch vengono usati 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 del latch sono di dimensioni ridotte. SQL Server dispone di diagnostica per risolvere i casi in cui uno SPID attende molto tempo per un latch. Questa diagnostica fa sì che la colonna bloccata nella sysprocesses tabella di sistema rifletta il proprietario di un latch che blocca la richiesta di latch di un altro SPID.

La proprietà del latch viene rilevata solo per i latch in modalità latch esclusiva (EX) o di aggiornamento (UP). La proprietà non viene rilevata per i latch in modalità di latch condiviso (SH). Ciò significa che la colonna bloccata non verrà popolata per alcune richieste di latch.

Nella maggior parte dei casi, è possibile ignorare il valore nella colonna bloccata se si verificano le condizioni seguenti:

  • Il valore nella waittime colonna è basso.
  • L'oggetto waittype dello SPID è un tipo di attesa latch.

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

Quando uno SPID è in attesa di un latch della pagina di I/O, è possibile notare che la colonna bloccata segnala brevemente che lo SPID si sta bloccando. Questo comportamento è un effetto collaterale del modo in cui vengono usati i latch per le operazioni di I/O sulle pagine di dati. Quando un thread invia una richiesta di I/O, lo SPID che invia la richiesta di I/O acquisisce un latch nella pagina. Tutte le operazioni di I/O SQL Server sono asincrone. Pertanto, 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 viene bloccato dal primo latch. Di conseguenza, la colonna bloccata segnala che lo SPID si sta bloccando. Al termine della richiesta di I/O, viene rilasciato il primo latch. Viene quindi concessa la seconda richiesta di latch.

Ad esempio, possono verificarsi le condizioni seguenti:

  1. SPID 55 vuole 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à latch EX forza altri SPID che potrebbero voler accedere alla pagina per attendere il completamento della richiesta di I/O. La modalità latch EX impedisce anche ad altri SPID di inviare una richiesta di I/O duplicata per la stessa pagina.

  3. SPID 55 invia la richiesta di I/O per leggere la pagina dal disco.

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

  5. Al termine della richiesta di I/O, viene rilasciato il latch EX nella pagina.

  6. Il rilascio del latch EX fornisce il latch SH a SPID 55.

  7. SPID 55 può ora leggere la pagina.

Tra i passaggi 4 e 5, la sysprocesses tabella indica che SPID 55 è bloccato da solo insieme a un tipo di attesa di PAGEIOLATCH_XX. In questo tipo di attesa XX può essere SH, UP o EX. Questo comportamento indica che SPID 55 ha emesso una richiesta di I/O e SPID 55 è in attesa del completamento della richiesta di I/O.