Commit vs Fast Commit vs Commit Cleanout nel database Oracle


12

Mi chiedevo se qualcuno potesse verificare la mia comprensione delle differenze tra quei 3 termini relativi ai database Oracle.

Molte fonti confondono questi termini e non li spiegano in dettaglio, quindi è stato un po 'una sfida trovare informazioni.

Da quello che raccolgo:

  1. Commit e commit rapido sono esattamente la stessa cosa, tutti i commit sono commit rapidi.
  2. Un commit veloce essenzialmente aggiorna solo il flag nella tabella delle transazioni dell'intestazione del segmento di annullamento / rollback per indicare che la transazione è stata impegnata. Tuttavia, il blocco effettivo non viene rivisitato, nel senso che l'indirizzo di byte di annullamento (UBA) nell'elenco delle transazioni interessate (ITL) che si trova nell'intestazione del blocco di dati punta ancora alla tabella delle transazioni del segmento di annullamento corrispondente. Inoltre, i byte di blocco delle righe corrispondenti non vengono rilasciati e il conteggio dei blocchi nell'ITL rimane invariato (le righe sono ancora bloccate).
  3. In una pulizia di commit, il blocco viene rivisitato e l'ITL viene aggiornato con il commit SCN. Tuttavia, il conteggio dei blocchi nell'ITL e il byte di blocco memorizzati con ogni riga non vengono ancora aggiornati (la riga è ancora bloccata proprio come nel commit rapido), ciò non genera redo anche se il blocco viene modificato.
  4. I blocchi che sono stati commessi normalmente (== commit rapido) saranno sottoposti a Pulizia blocchi ritardata quando vengono toccati successivamente (e generano ripetizione).
  5. I blocchi sottoposti a ripulitura del commit subiranno una ripulitura dei blocchi di registrazione ritardata quando vengono toccati successivamente (e generano ripetizione).

Spero che qualcuno possa verificare questi punti! Grazie!

Risposte:


6

Hai le basi giuste. Esiste un solo tipo di commit (non normale , veloce ...).

dai concetti doc :

Quando viene eseguita una transazione, si verificano le seguenti azioni:

  • Un numero di modifica del sistema (SCN) viene generato per COMMIT.

    La tabella delle transazioni interna per i tablespace di annullamento associati registra il commit della transazione. L'SCN univoco corrispondente della transazione viene assegnato e registrato nella tabella delle transazioni. Vedere "Livello di isolamento serializzabile".

  • Il processo di scrittura del registro (LGWR) scrive le voci rimanenti del registro di ripetizione nei buffer di registro di ripetizione nel registro di ripetizione online e scrive la transazione SCN nel registro di ripetizione online. Questo evento atomico costituisce il commit della transazione.

  • Oracle Database rilascia blocchi bloccati su righe e tabelle.

    Gli utenti accodati in attesa di blocchi bloccati dalla transazione non impegnata sono autorizzati a procedere con il loro lavoro.

  • Oracle Database elimina i punti di salvataggio.

  • Oracle Database esegue una pulizia di commit.

    Se i blocchi modificati contenenti dati dalla transazione impegnata sono ancora nell'SGA e se nessun'altra sessione li sta modificando, il database rimuove dai blocchi le informazioni sulla transazione relative al blocco. Idealmente, COMMIT ripulisce i blocchi in modo che un SELECT successivo non debba eseguire questa attività.

Quindi la pulizia (completa con redo) verrà eseguita durante il commit se i blocchi sono ancora nell'SGA.

Nei sistemi attivi, è comune che i blocchi con transazioni senza commit vengano scritti su disco e scaricati dall'SGA. In questo caso, il blocco viene lasciato così com'è e la query successiva che tocca il blocco eseguirà una ripulitura del blocco ritardata (il punto 5 non si verifica in tutti i casi).

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.