Database - Linux - PostgreSQL

Come aumentare la dimensione del WAL in PostgreSQL

La dimensione dei file WAL (Write-Ahead Log) è un parametro fondamentale per le prestazioni e l’affidabilità di un database PostgreSQL. Aumentarla può migliorare l’efficienza dei checkpoint e ridurre il carico I/O, ma è importante sapere che questa impostazione non è modificabile a caldo.

Il parametro wal_segment_size determina la dimensione di ogni singolo file nella directory pg_wal. Il valore predefinito è solitamente 16 MB. Possiamo eseguire la query dall’utenza postgres

[postgres@testsrv01 ~]$ psql -c "show wal_segment_size"
 wal_segment_size
------------------
 16MB
(1 row)

La caratteristica cruciale di questo parametro è che viene impostato solo al momento della creazione del database tramite il comando initdb e non può essere modificato in fase di esecuzione del database server.

Per le versioni di PostgreSQL 11 e successive, lo strumento a riga di comando pg_resetwal offre un modo per modificare questa impostazione.

Importante: Questa operazione modifica i file di controllo a basso livello del database. Assicurati che il database sia stato spento in modo pulito prima di procedere. L’uso improprio può causare perdita di dati.

Fermare il servizio PostgreSQL

[postgres@testsrv01 ~]$ sudo systemctl stop postgresql-17

Eseguire pg_resetwal. Va specificata la directory contenente i file del database (-D) e la nuova dimensione del segmento (–wal-segsize). La dimensione deve essere una potenza di due (es. 32, 64, 128 MB), compresa tra 1 MB e 1024 MB.

[postgres@testsrv01 ~]$ /usr/pgsql-17/bin/pg_resetwal -D /var/lib/postgresql/17/main --wal-segsize=64

Riavviare il servizio PostgreSQL

[postgres@testsrv01 ~]$ sudo systemctl start postgresql-17

Possiamo rieseguire la query per verificare che la dimensione del parametro wal_segment_size sia modificata

[postgres@testsrv01 ~]$ psql -c "show wal_segment_size"
 wal_segment_size
------------------
 64MB
(1 row)

Nel caso in cui i file WAL vengono sottoposti a backup, ad esempio utilizzando Veeam, è necessario eseguire un backup full dopo aver modificato il parametro wal_segment_size