Il buffer Doublewrite di XtraDB/InnoDB

Stai visualizzando una vecchia versione di questo article. Visualizza la versione più recente.

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.

Doublewrite buffer settings

The doublewrite buffer can be moved to a different drive, reducing contention on random reads. Use the innodb_doublewrite_file system variable to specify a location. Since the doublewrite buffer is mostly sequential writes, a traditional HDD is a better choice than SSD.

To turn off the doublewrite buffer, set the innodb_doublewrite system variable to 0. This is not recommended for production systems. An alternative option is atomic writes - see FusionIO DirectFS atomic write support for details.

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.