Skip to content

Architettura

Postgres

Architettura

🔹 Shared Memory

- Buffer Cache           : blocchi di dati letti/scritti (tabelle, indici)
- WAL Buffers            : log delle transazioni in attesa di scrittura

Parametri configurabili consigliati:

- shared_buffers         = 25% della RAM (es. 2GB su 8GB)  "richiede riavvio"
- wal_buffers            = 16MB   1/32 della dimensione di shared_buffers  "modificabile a runtime"

🔹 Memory Process

- Temporary Buffers      : usati per tabelle temporanee nella sessione utente
- Work Memory            : operazioni di sort (ORDER BY, DISTINCT) e hash (join, aggregation)
- Maintenance Work Mem   : operazioni di manutenzione (VACUUM, CREATE INDEX, FK)

Parametri configurabili consigliati:

- temp_buffers           = 8MB (modificabile a runtime)
- work_mem               = 4MB (modificabile a runtime)
                          ↳ consigliato: 25% della RAM / max_connections
- maintenance_work_mem   = 64MB (modificabile a runtime)
                          ↳ consigliato: 5%-10% della RAM

🔹 Process

- Postmaster             : processo principale che avvia e gestisce gli altri
- Backend Process        : uno per ogni connessione client
- WAL Writer             : scrive i WAL su disco
- WAL Sender             : invia WAL ai replica (replica streaming)
- Background Writer      : svuota periodicamente i buffer
- Checkpointer           : gestisce i checkpoint
- Autovacuum             : pulisce tuple obsolete
- Archiver               : (opzionale) salva WAL per backup
- Stats Collector        : raccoglie metriche di sistema
- Logical Replication    : gestisce la replica logica
- Startup Process        : attivo all’avvio o recovery
- Logger                 : scrive i log di sistema

Parametri configurabili consigliati:

- max_connections = 100               → numero massimo di connessioni simultanee (riavvio richiesto)
- autovacuum = on                    → abilita pulizia automatica tuple obsolete (modificabile a runtime)
- autovacuum_max_workers = 3        → numero massimo di processi autovacuum paralleli (modificabile a runtime)
- autovacuum_naptime = 60s           → intervallo tra cicli autovacuum (modificabile a runtime)
- wal_writer_delay = 200ms            → frequenza di scrittura WAL su disco (modificabile a runtime)
- bgwriter_delay = 200ms              → frequenza di svuotamento buffer (modificabile a runtime)
- checkpoint_timeout = 5min           → intervallo tra checkpoint automatici (modificabile a runtime)
- logging_collector = on              → abilita raccolta log sistema (riavvio richiesto)

🔹 Physical file

- Data Files             : memorizzano dati di tabelle e indici, organizzati in pagine da 8KB
- Write-Ahead Log (WAL)  : file di log delle transazioni, garantiscono durabilità e recovery
- WAL Archive            : archiviazione esterna dei WAL per backup e replica point-in-time
- Control Files          : contengono informazioni di stato e configurazione del cluster
- Configuration Files    : file di configurazione (postgresql.conf, pg_hba.conf, ecc.)
- Temporary Files        : usati per operazioni temporanee (es. sort, join) quando la memoria non basta

Parametri configurabili consigliati:

- data_directory         = percorso dove risiedono i data files (modificabile solo a riavvio)
- wal_level              = replica o minimal (modificabile a runtime, ma richiede riavvio per alcuni livelli)
- archive_mode           = on/off (abilita/disabilita archivio WAL; richiede riavvio)
- archive_command        = comando shell per salvare i WAL archiviati (modificabile a runtime)
- temp_file_limit        = limite dimensione file temporanei (modificabile a runtime)

🔹 Parallelism

Architettura PostgreSQL

Parametro Descrizione
max_worker_processes Numero massimo di processi worker totali (background, replica, parallelismo, etc.)
max_parallel_workers Numero massimo di worker paralleli complessivi per il server
max_parallel_workers_per_gather Numero massimo di worker per singola operazione parallela (Gather)
Esempio:

Se hai 16 core e prevedi al massimo 4 query parallele simultanee con 3 worker ciascuna:

max_worker_processes = 16
max_parallel_workers = 12 (4 query × 3 worker)
max_parallel_workers_per_gather = 3

Così non superi i core disponibili.