Qual è il vantaggio della memorizzazione delle modifiche alle transazioni del database nel registro e nelle pagine di dati?

4

Conosco le basi del perché un database utilizza un log delle transazioni: proprietà ACID, capacità di rollback / ripristino ecc.

L'algoritmo di base che vedo per una transazione è il seguente:

    La transazione
  • modifica i dati: le pagine dei dati vengono cambiate nella memoria
  • il log delle transazioni viene scritto su disco (deve accadere prima che venga registrato il commit)
  • il commit è stato emesso
  • le pagine di dati vengono scritte sul disco in modo asincrono

In teoria, ciò significa che si salvano le operazioni di I / O perché non è necessario attendere che le pagine di dati vengano scritte su disco prima di un commit. Devi solo attendere che il log finisca di essere scritto perché la transazione può essere rifatta dal log se si verifica un arresto anomalo prima che vengano scritte le pagine di dati. Tuttavia, se il log delle transazioni deve memorizzare valori prima / dopo o almeno tutti i nuovi dati che sono stati modificati nelle pagine di dati, in che modo questo salva I / O? Non richiederebbe la stessa quantità di tempo per non memorizzare le modifiche dei dati nel log e attendere che le pagine di dati vengano scritte in modo sincrono?

Ad esempio, se la mia transazione apporta 10 MB di modifiche ai dati, non impiegherebbe la stessa quantità di tempo per scrivere 10 MB di modifiche al log, in quanto vorrebbe solo aspettare e scrivere quei 10 MB di pagine di dati sul disco? A che serve anche archiviare i dati modificati nel registro?

    
posta bobroxsox 01.02.2016 - 23:36
fonte

1 risposta

5

Il log è una struttura di dati di sola aggiunta, che è molto più semplice per garantire che sia nel suo stato precedente o nel suo nuovo stato.

Mentre le pagine di dati sulle transazioni sono dappertutto.

Quindi ci sono due differenze:

(1) il 10 MB scritto nel log potrebbe accadere in una scrittura, mentre il 10 MB scritto nelle pagine di dati può richiedere numerosi I / O da completare.

(2) Con la struttura del registro append-only è più facile assicurare che tutta la transazione sia impegnata nel log o che nulla sia (il log rimane non modificato), mentre con i numerosi I / O per le pagine di dati, un la garanzia tutto o niente è più difficile (e perché viene utilizzato il registro).

    
risposta data 01.02.2016 - 23:49
fonte

Leggi altre domande sui tag