PostgreSQL 17 rappresenta un punto di maturità per i database open source, offrendo nuove feature su prestazioni, parallelismo e sicurezza. In un contesto enterprise, la differenza tra un’installazione “default†e una ottimizzata può determinare la stabilità dell’intera infrastruttura applicativa. Di seguito le best practice chiave, con esempi concreti di configurazione e monitoring.
1. Parametri di configurazione essenziali
La configurazione predefinita di PostgreSQL non è adatta a carichi enterprise. Alcuni parametri inpostgresql.conf
vanno adattati a CPU, RAM e workload.
Memoria
# Esempio per server con 64 GB RAM
shared_buffers = 16GB # ~25% RAM totale
work_mem = 64MB # per query complesse, join, sort
maintenance_work_mem = 2GB # per VACUUM, CREATE INDEX
effective_cache_size = 48GB # ~75% RAM disponibile
Parallelismo
max_parallel_workers = 16
max_parallel_workers_per_gather = 4
parallel_setup_cost = 1000
parallel_tuple_cost = 0.1
In PostgreSQL 17 il parallelismo è migliorato, conviene abilitarlo per query analitiche e reportistica.
Autovacuum
autovacuum = on
autovacuum_max_workers = 5
autovacuum_naptime = 30s
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.02
Fondamentale per evitare bloat delle tabelle e degrado prestazionale.
2. Gestione dei Tablespace
Separare dati, indici e log in tablespace dedicati riduce la contesa I/O e migliora la scalabilità .
Creazione tablespace
CREATE TABLESPACE ts_data LOCATION '/var/lib/pgsql/tablespaces/data';
CREATE TABLESPACE ts_index LOCATION '/var/lib/pgsql/tablespaces/index';
CREATE TABLESPACE ts_log LOCATION '/var/lib/pgsql/tablespaces/log';
Assegnazione a un database
CREATE DATABASE crmdb
WITH OWNER crm_admin
TABLESPACE ts_data;
Spostamento indici su tablespace dedicato
CREATE INDEX idx_orders_date
ON orders(order_date)
TABLESPACE ts_index;
Best practice: utilizzare volumi separati (SSD per indici, storage capiente per dati storici, log su disco ad alta affidabilità ).
3. Monitoring e osservabilitÃ
Il monitoraggio continuo è imprescindibile in ambienti enterprise. Alcuni strumenti chiave:
- pg_stat_statements – Estensione ufficiale per analizzare query più lente e frequenti.
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
SELECT query, calls, total_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
- Prometheus + Grafana – Standard de facto per metriche (TPS, I/O, lock, latency).
- pgBadger – Report dettagliati dai log.
- pganalyze / Percona PMM – Soluzioni avanzate per APM e tuning automatico.
Esempio di query per analizzare lock:
SELECT pid, usename, datname, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE wait_event IS NOT NULL;
4. Sicurezza e resilienza
- Abilitare TLS per tutte le connessioni (
ssl = on
). - Utilizzare pg_hba.conf con restrizioni per subnet e metodi di autenticazione sicuri (
scram-sha-256
). - Implementare replica streaming e hot standby per alta disponibilità .
- Backup consistenti con pgBackRest o Barman, integrati con snapshot storage.
5. Manutenzione periodica
- Pianificare REINDEX su tabelle con alto tasso di aggiornamenti.
- Utilizzare pg_repack per ridurre la frammentazione senza downtime.
- Monitorare la crescita dei WAL e archiviare con strategie di retention su object storage.
PostgreSQL 17, in un’installazione enterprise, richiede una configurazione mirata di memoria, parallelismo e autovacuum, una corretta gestione dei tablespace e un robusto sistema di monitoring. Le organizzazioni che investono in questi aspetti ottengono database stabili, veloci e sicuri, in grado di supportare applicazioni mission critical senza colli di bottiglia.