PAGELATCH_ * alto e WRITELOG attendono. Sono collegati?


11

Stiamo vedendo i tipi di attesa PAGELATCH_EX e PAGELATCH_SH molto alti insieme alle attese WRITELOG elevate. Ho diagnosticato la query che ha causato l'attesa di PAGELATCH e posso eliminarli riducendo la frequenza di inserimento in una chiave primaria cluster occupata definita con un valore IDENTITY. Comprendo che questo fenomeno è noto come contesa di latch di inserimento nell'ultima pagina.

Tuttavia, la mia domanda è quando viene inserito un nuovo record, SQL Server accetta un PAGELATCH_EX esclusivo in una pagina buffer, inserisce il record nella pagina buffer, scrive il record nel registro delle transazioni e quindi rilascia il PAGELATCH_EX esclusivo come https dettagliato : // www.microsoft.com/en-ie/download/details.aspx?id=26665 Pagina 24. Oppure scrive il record nel registro delle transazioni prima di prendere PAGELATCH_EX come dettagliato "Risoluzioni della controversia PAGELATCH su carichi altamente concorrenti" INSERT - Informazioni di base Guida di SQLCAT a: Motore relazionale

Se il record viene scritto per accedere al di fuori del meccanismo di blocco, allora posso escludere scritture lente su disco come causa di attese PAGELATCH elevate. Ma se il fermo viene mantenuto fino a quando il record non è indurito a registrare, probabilmente dovrei prendere in considerazione WRITELOG.

Inoltre, la presenza di più indici non cluster causerebbe la conservazione del latch PAGELATCH_ * più a lungo, ovvero se una tabella ha un cluster e più indici non cluster vengono aggiunti e rilasciati contemporaneamente a ciascuna delle pagine del buffer dell'indice?

Aggiornamento 1 Dopo aver letto la diapositiva due confio-sql-server-writelog-wait e l'architettura WAL generale. Ora sono consapevole che il passaggio "Registra una voce di registro che è stata modificata la riga" dettagliato in entrambi i white paper si riferisce a SQL Server che registra una modifica nella cache del registro delle transazioni, non sul disco. Una volta completata la transazione o riempito il buffer, tutti i record vengono immediatamente scaricati su disco.


1
Guardando un problema molto simile a questo in questo momento ..
Dave Lawrence,

Hai esaminato i VLF potenzialmente alti che causano problemi?
Kin Shah,

@Kin intendi in termini di svuotamento lento del registro sul disco che tiene aperta una chiusura PAGELATCH_EX e causa contesa sulla chiusura?
Pixelated

Non vi è alcun motivo per cui un'implementazione di SQL Server deve generare il record di registro con un latch di pagina. Perché dovrebbero farlo in questo modo? Non plausibile. Inoltre, se le scritture dei log fossero eseguite sotto patchlatch, non vedresti quasi mai WRITELOG aspettare. È possibile utilizzare un solo tipo di attesa alla volta.
usr

Risposte:


1

Tuttavia, la mia domanda è quando viene inserito un nuovo record, SQL Server accetta un PAGELATCH_EX esclusivo in una pagina buffer, inserisce il record nella pagina buffer, scrive il record nel registro delle transazioni e quindi rilascia il PAGELATCH_EX esclusivo

È necessario notare che il latch protegge solo l'integrità fisica della pagina mentre è in memoria, pertanto il latch verrebbe eseguito quando la pagina è in memoria. Supponiamo che venga inserito un record e che la pagina debba essere recuperata. Innanzitutto, la pagina verrebbe bloccata e portata in memoria, quindi verrebbe bloccata e le informazioni verrebbero scritte. Il processo dopo questo sarebbe

  • Genera record di registro

  • Aggiorna la pagina LSN in modo che corrisponda a quella del record del registro

  • Modifica dati (sporca la pagina)

  • Rilascio del fermo

  • Avvia transazione

  • FlushToLSN di Commit

  • Rilasciare i blocchi

  • Conferma transazione completata

Per maggiori dettagli e spiegazioni sui passaggi precedenti, leggi il blog di presentazione I / O di Bob Dorr

Le attese di Pagelatch * non sono di I / O e ho visto la maggior parte delle volte che queste attese sono importanti a causa della contesa di allocazione. La mia impressione è che debba fare qualcosa con come tempdb is configured. Quindi, come è configurato il tuo tempdb?, Quanti file di dati tempdb sono presenti? Assicurati che abbiano la stessa crescita automatica e le stesse dimensioni. Quando viene creata una nuova pagina, le pagine di sistema come le pagine GAM, SGAM e PFS devono essere aggiornate o sono accessibili e quando SQL Server trova contesa nell'accesso a queste pagine, tale attesa viene visualizzata.


Ciao @Shanky, basato su sys.dm_os_waiting_tasks.resource_description accoppiato con DBCC PAGE e il tipo di PAGELATCH_ * Ho escluso tempDB. Sulla base della catena di eventi di Bob Dorr sembra che il passaggio "Genera record di registro" sia completato all'interno del meccanismo di blocco?
Pixelated

3
Entrambi sono eventi reciprocamente esclusivi che la scrittura nel file di registro non ha nulla a che fare con il blocco del proprio SQL Server seguendo il protocollo WAL per scrivere le informazioni nel registro prima di
eseguire
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.