Il buffer Doublewrite di XtraDB/InnoDB

Il buffer doublewrite di InnoDB è stato implementato per recuperare le pagine scritte a metà. Questo può accadere se vi è una interruzione della corrente mentre InnoDB sta scrivendo una pagina su disco. Leggendo quella pagina, InnoDB può verificare la corruzione dal fatto che i checksum non corrispondono. Tuttavia, per effettuare il recupero, occorre avere una copia intatta della pagina.

Il buffer doublewrite fornisce quella copia.

Quando InnoDB invia una pagina al disco, questa viene prima scritta nel buffer doublewrite. Solo quando il buffer è stato inviato al disco, InnoDB scrive la pagina nella destinazione finale. Durante il recupero, InnoDB scansiona il buffer doublewrite e per ogni pagina valida che trova controlla se anche la pagina corrispondente nel file dei dati è valida.

Sebbene i dati siano scritti due volte, il buffer doublewrite non implica il doppio dell'I/O, perché i dati sono scritti nel buffer in un grande blocco sequenziale con una singola chiamata a fsync(). Impiega però un tempo maggiore, e l'effetto diviene visibile con uno storage veloce e un carico di lavoro con molte scritture.

Le impostazioni del buffer Doublewrite

Il buffer doublewrite può essere spostato su un drive differente, riducendo il contenimento sulle letture casuali. E' possibile usare la variabile di sistema innodb_doublewrite_file per specificare la posizione. Poiché il buffer doublewrite è costituito soprattutto da scritture sequenziali, un HDD tradizionale è una scelta migliore rispetto a SSD.

Per disattivare il buffer doublewrite, si imposta la variabile di sistema innodb_doublewrite a 0. Questa operazione non è raccomandata nei sistemi di produzione. Una possibile alternativa sono le scritture atomiche - si veda FusionIO DirectFS atomic write support per i dettagli.

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.