Performance
Performance is an important goal for pgagroal and effort have been made to make pgagroal scale and use a limited number of resources.
This chapter describes pgagroal performance characteristics and provides benchmarking results compared to other PostgreSQL connection pool implementations.
Benchmarking Methodology
The pgbench program was used in the performance runs. All pool configurations were made with performance in mind.
The runs were performed on RHEL 7.7 / EPEL / DevTools 8 based machines on 10G network. All connection pools were the latest versions as of January 14, 2020. pgagroal was using the epoll mode of libev.
Performance Results
Simple Protocol
This run uses:
pgbench -M simple
Extended Protocol
This run uses:
pgbench -M extended
Prepared Statements
This run uses:
pgbench -M prepared
Read-Only Workload
This run uses:
pgbench -S
Performance Tuning
Pipeline Selection
Choose the appropriate pipeline for your workload:
- Performance pipeline: Fastest option for high-throughput scenarios
- Session pipeline: Balanced performance with full feature support
- Transaction pipeline: Best for applications with many short transactions
See Pipelines for detailed configuration.
Connection Pool Sizing
Optimal pool sizing depends on your workload:
- CPU-bound workloads: Pool size approximately equals number of CPU cores
- I/O-bound workloads: Pool size can be higher than CPU cores
- Mixed workloads: Start with 2x CPU cores and adjust based on monitoring
System-Level Optimizations
Network Configuration
- Use dedicated network interfaces for database traffic
- Configure appropriate TCP buffer sizes
- Consider using 10G or higher network speeds for high-throughput scenarios
Memory Configuration
- Enable huge pages for better memory management
- Configure appropriate shared memory settings
- Monitor memory usage patterns
CPU Configuration
- Pin pgagroal processes to specific CPU cores if needed
- Configure CPU governor for performance
- Monitor CPU utilization patterns
Monitoring Performance
Use the following metrics to monitor pgagroal performance:
- Connection utilization: Active vs. total connections
- Response times: Average and percentile response times
- Throughput: Transactions per second
- Resource usage: CPU, memory, and network utilization
See Prometheus for detailed monitoring setup.