Parameter Optimization Policy
Learn the parameter optimization strategies Pigsty uses for the 4 different PostgreSQL workload scenarios.
Pigsty provides four preset Patroni/PostgreSQL config templates optimized for different workloads:
| Template | CPU Cores | Use Case | Characteristics |
|---|---|---|---|
oltp.yml | 4-128C | OLTP transactions | High concurrency, low latency |
olap.yml | 4-128C | OLAP analytics | Large queries, high parallelism |
crit.yml | 4-128C | Critical/Finance | Data safety, audit, zero-loss |
tiny.yml | 1-3C | Tiny instances | Resource-constrained envs |
Use pg_conf to select a template; default is oltp.yml.
The database tuning template
pg_confshould be paired with the OS tuning templatenode_tune.
Set pg_conf in your cluster definition.
It’s recommended to set node_tune accordingly for OS-level tuning:
pg-test:
hosts:
10.10.10.11: { pg_seq: 1, pg_role: primary }
10.10.10.12: { pg_seq: 2, pg_role: replica }
vars:
pg_cluster: pg-test
pg_conf: oltp.yml # PostgreSQL config template (default)
node_tune: oltp # OS tuning template (default)
For critical financial workloads, use crit.yml:
pg-finance:
hosts:
10.10.10.21: { pg_seq: 1, pg_role: primary }
10.10.10.22: { pg_seq: 2, pg_role: replica }
10.10.10.23: { pg_seq: 3, pg_role: replica }
vars:
pg_cluster: pg-finance
pg_conf: crit.yml # PostgreSQL critical template
node_tune: crit # OS critical tuning
For low-spec VMs or dev environments, use tiny.yml:
pg-dev:
hosts:
10.10.10.31: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-dev
pg_conf: tiny.yml # PostgreSQL tiny template
node_tune: tiny # OS tiny tuning
The four templates differ significantly in key parameters:
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| max_connections | 500/1000 | 500 | 500/1000 | 250 |
| work_mem range | 64MB-1GB | 64MB-8GB | 64MB-1GB | 16MB-256MB |
| maintenance_work_mem | 25% shmem | 50% shmem | 25% shmem | 25% shmem |
| max_locks_per_transaction | 1-2x maxconn | 2-4x maxconn | 1-2x maxconn | 1-2x maxconn |
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| max_worker_processes | cpu+8 | cpu+12 | cpu+8 | cpu+4 |
| max_parallel_workers | 50% cpu | 80% cpu | 50% cpu | 50% cpu |
| max_parallel_workers_per_gather | 20% cpu (max 8) | 50% cpu | 0 (off) | 0 (off) |
| parallel_setup_cost | 2000 | 1000 | 2000 | 1000 |
| parallel_tuple_cost | 0.2 | 0.1 | 0.2 | 0.1 |
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| synchronous_mode | depends pg_rpo | depends pg_rpo | forced on | depends pg_rpo |
| data_checksums | optional | optional | forced on | optional |
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| vacuum_cost_delay | 20ms | 10ms | 20ms | 20ms |
| vacuum_cost_limit | 2000 | 10000 | 2000 | 2000 |
| autovacuum_max_workers | 3 | 3 | 3 | 2 |
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| idle_in_transaction_session_timeout | 10min | off | 1min | 10min |
| log_min_duration_statement | 100ms | 1000ms | 100ms | 100ms |
| default_statistics_target | 400 | 1000 | 400 | 200 |
| track_activity_query_size | 8KB | 8KB | 32KB | 8KB |
| log_connections | auth | auth | full | default |
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| io_workers | 25% cpu (4-16) | 50% cpu (4-32) | 25% cpu (4-8) | 3 |
| temp_file_limit | 1/20 disk | 1/5 disk | 1/20 disk | 1/20 disk |
OLTP Template: Default choice for most transaction processing. Ideal for e-commerce, social, gaming apps.
OLAP Template: For data warehouses, BI reports, ETL. Allows large queries, high parallelism, relaxed timeouts.
CRIT Template: For financial transactions, core accounting with strict consistency/security requirements. Forced sync replication, checksums, full audit.
TINY Template: For dev/test environments, resource-constrained VMs, Raspberry Pi. Minimizes resource usage, disables parallel queries.
Create custom templates based on existing ones. Templates are in roles/pgsql/templates/:
roles/pgsql/templates/
├── oltp.yml # OLTP template (default)
├── olap.yml # OLAP template
├── crit.yml # CRIT critical template
└── tiny.yml # TINY micro template
Steps to create a custom template:
roles/pgsql/templates/pg_confExample:
cp roles/pgsql/templates/oltp.yml roles/pgsql/templates/myapp.yml
# Edit myapp.yml as needed
Then use in your cluster:
pg-myapp:
vars:
pg_conf: myapp.yml
Templates use Jinja2 syntax; parameters are dynamically computed based on node resources (CPU, memory, disk).
For technical details on template parameter optimization, see Tuning Strategy:
pg_conf: PostgreSQL config templatenode_tune: OS tuning template, should match pg_confpg_rto: Recovery time objective, affects failover timeoutpg_rpo: Recovery point objective, affects sync replicationpg_max_conn: Override template max connectionspg_shared_buffer_ratio: Shared buffer memory ratiopg_storage_type: Storage type, affects IO paramsLearn the parameter optimization strategies Pigsty uses for the 4 different PostgreSQL workload scenarios.
PostgreSQL config template optimized for online transaction processing workloads
PostgreSQL config template optimized for online analytical processing workloads
PostgreSQL config template optimized for critical/financial workloads with data safety and audit compliance
PostgreSQL config template optimized for micro instances and resource-constrained environments
Was this page helpful?
Thanks for the feedback! Please let us know how we can improve.
Sorry to hear that. Please let us know how we can improve.