Asynchronous Commit

mercoledì 6 agosto 2008 alle 06:33 | Pubblicato su Diario, Installation and Configuration, Performance Tuning | 3 commenti
Tag: ,

Con la Release 2 di Oracle 10g è stata introdotta una nuova caratteristica che permette di cambiare il comportamento del COMMIT.  Chi ha un po’ di esperienza con Oracle sa che da tempo immemore (la mia memoria si rifiuta di andare oltre la release 9.2) il commit di una transazione è un’operazione “sincrona”, che provoca lo svuotamento del log buffer sugli online redolog. Questo significa che  quando l’utente dopo aver fatto commit riceve la conferma la sua transazione è al sicuro (sei dischi sono sani) su disco e non può andare persa. Con 10gR2 questo comportamento può essere modificato, a livello di transazione, tramite un’estensione della sintassi del comando commit, a livello di sessione o a livello di sistema tramite il nuovo parametro COMMIT_WRITE. Le opzioni possibili sono:

  • IMMEDIATE, WAIT : il default e il comportamento tradizionale
  • IMMEDIATE, NOWAIT il commit ritorna l’ok senza  aspettare che il redo sia scritto su disco
  • BATCH, NOWAIT, il commit ritorna l’ok senza aspettare che il redo sia scritto su disco ed in più si prende la libertà di non iniziare a scrivere ma bufferizzare ulteriormente
  • BATCH, WAIT: questa combinazione secondo me non ha senso e non è spiegata esplicitamente da nessuna parte.

Come ho scritto la combinzione “BATCH , WAIT” secondo me non ha senso ed è contraddittoria, da un lato con la parte BATCH si dice di bufferizzare il redo, dall’altra con “WAIT” si dice di aspettare la completa scrittura su disco, quindi secondo me equivale ad “IMMEDIATE,WAIT”. Dal manuale non arrivano chiarimenti.

Per fortuna altri hanno fatto dei test e pubblicato i risultati (ma non esaminato il caso specifico anomalo), ad esempio Tim Hall, dai risultati da lui pubblicati risulta (tolgo quelli non rilevanti per la mia analisi):

COMMIT_WRITE=WAIT             : 141
COMMIT_WRITE=BATCH,WAIT       : 139
COMMIT_WRITE=IMMEDIATE,WAIT   : 133

Nel primo caso e nell’ultimo il comportamento è lo stesso, perchè IMMEDIATE è il default, il mio caso sta in mezzo il che avvalora la mia tesi.

I risultati di un’altro test analogo si trovano in un commento ad un post di Christo Kutrovsky su pythian e sono simili

About these ads

3 commenti »

RSS feed dei commenti a questo articolo. TrackBack URI

  1. Ciao Cristian,
    interessante anche se in realtà il concetto non è nuovo, per quanto riguarda il codice PL/SQL la commit era già asincrona anche prima della 10GR2;
    di nuovo c’è che ora possa essere esteso a tutto ciò che non è PL/SQL e la possibilità di un minimo di controllo sul comportamento….
    Piuttosto sarei curioso se fondamentalmente c’è stato un nuovo sviluppo o è stato sostanzialmente kernelizzato il comportamento che già si aveva col codice PL/SQL, vedere link a Connor McDonald:

    http://www.oracledba.co.uk/tips/lgwr_dilemma.htm

    e sul libro di Tom Kyte (cap. 9 “REDO AND UNDO” pagina 297)

    Alessandro

  2. Ciao Alessandro,
    grazie per averlo ricordato, io, usando poco PL/SQL e con commit mirati me n’ero scordato. Soprattutto interessante anche il link che riporti che ricorda come fare un’analisi più accurata: guardando le statistiche, in particolare, osservanto ‘redo synch writes’ su V$MYSTAT si conferma il fatto che la combinazione BATCH WAIT equivale a IMMEDIATE WAIT. Invece sarei stato curioso di fare delle osservazioni sulla statistica ‘redo writes’ che però in V$MYSTAT è sempre zero. Immagino che debba essere osservata a livello globale (con V$SYSSTAT), ma per fare ciò mi serve un db su cui non lavorino altri.

  3. ‘redo synch writes’ indica le call di synch che la sessione invia/manda al LGWR

    ‘redo writes’ identifica invece il numero di scritture del LGWR

    probabilmente, credo, sia proprio per questa intrinseca natura della statistica che bisogna osservarla su V$SYSSTAT

    Alessandro


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Blog su WordPress.com. | The Pool Theme.
Voci e commenti feeds.

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 58 follower

%d blogger cliccano Mi Piace per questo: