Hi Team,
We are currently migrating our database environments from IBM Db2 to PostgreSQL 17.6 on AlmaLinux and would like some guidance/best practices around recommended ulimit (open file descriptor) settings for PostgreSQL.
Environment details:
- OS: AlmaLinux
- PostgreSQL Version: 17.6
- Deployment Model: Multiple PostgreSQL clusters (~10 clusters) running on the same server
- All PostgreSQL instances are managed through
systemd services using a template service (postgresql@.service) - Workload includes ETL, PgBouncer
Current DB2 Setting:
Max open files = 65535
We would like clarification on:
- Is increasing the open file limit (
ulimit -n) recommended/required for PostgreSQL in such multi-cluster production environments? - What would be the recommended
LimitNOFILE value for PostgreSQL considering:- multiple clusters on same host
- production workloads
- PgBouncer usage
- ETL-heavy processing
Current PostgreSQL service template:
[Unit]
Description=PostgreSQL 17 database server instance %i
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
EnvironmentFile=/etc/postgresql/%i.env
ExecStart=/volumes/pg/pgsql-17/bin/pg_ctl start -D ${PGDATA} -o "-p ${PGPORT}" -l ${PGLOG}/postgresql.log -s -w -t 300
ExecStop=/volumes/pg/pgsql-17/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/volumes/pg/pgsql-17/bin/pg_ctl reload -D ${PGDATA} -s
[Install]
WantedBy=multi-user.target
Reg,
Hussain