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¶
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.