Performance and resource allocation

This page covers topics related to measuring and configuring the performance of PostgreSQL

Performance testing

For performance testing and benchmarking charms, we recommend using the Charmed Sysbench operator. This is a tool for benchmarking database applications that includes monitoring and CPU/RAM/IO performance measurement.

Resource allocation

Charmed PostgreSQL K8s resource allocation can be controlled via the charm’s profile config option. There are two profiles: production and testing.

Value

Description

Tech details

production
(default)

Maximum performance

25% of the available memory for shared_buffers and the remain as cache memory (defaults mimic legacy charm behavior).
The max_connections=max(4 * os.cpu_count(), 100).
Use pgbouncer if max_connections are not enough (reasoning).

testing

Minimal resource usage

PostgreSQL 14 defaults.

Caution

Pre-deployed application profile change is planned but currently is NOT supported.

You can set the profile during deployment using the --config flag. For example:

juju deploy postgresql-k8s --channel 14/stable --trust --config profile=testing

You can change the profile using the juju config action. For example:

juju config postgresql-k8s profile=production

For a list of all of this charm’s config options, see the Configuration tab.

Juju constraints

The Juju --constraints flag sets RAM and CPU limits for Kubernetes pods:

juju deploy postgresql-k8s --channel 14/stable --trust --constraints cores=8 mem=16G

Juju constraints can be set together with the charm’s profile:

juju deploy postgresql-k8s --channel 14/stable --trust --constraints cores=8 mem=16G --config profile=testing