PostgreSQL 9.1: le tabelle “Unlogged”

Una delle novità introdotte in Postgres 9.1 è rappresentata dalle tabelle "unlogged". Queste tabelle non producono file WAL, cioè quei file che contengono i log delle operazioni di scrittura sulle tabelle.

Eliminando del tutto la scrittura dei file WAL e di conseguenza l’operazione di fsync() al momento del COMMIT della transazione, aumenta considerevolmente la velocità di scrittura su queste particolari tabelle:


postgres=# CREATE TABLE tabella-normale AS SELECT generate_series( 1,1000000 );
SELECT 1000000
Time: 7626.138 ms
postgres=# CREATE UNLOGGED TABLE tabella-unlogged AS SELECT generate_series( 1,1000000 );
SELECT 1000000
Time: 503.786 ms

D’altra parte, l’assenza di file WAL relativi alle operazioni sulla tabella fa sì che il contenuto delle tabelle unlogged non venga mantenuto dopo un riavvio del server causato da un crash (potete divertirvi a provare questo comportamento usando il comando kill sul processo server – preferibilmente non in produzione).

Inoltre, se si usa un sistema di replica come warm standby o hot standby, il contenuto delle tabelle unlogged non viene replicato sui vari slave.

Concludendo, questa nuova funzionalità introduce vantaggi per la memorizzazione di dati facilmente generabili e non durabili. Un caso d’uso comune potrebbe essere il caching, dove la velocità di scrittura è fondamentale e allo stesso tempo non ci si deve preoccupare della persistenza dei dati dopo un crash del server.

Per maggiori informazioni: http://www.postgresql.org/docs/9.1/static/sql-createtable.html.

ll presente articolo è ispirato dal Wiki sulle novità della release 9.1 redatto dalla comunità PostgreSQL.

This Post Has 0 Comments

Leave A Reply