-
Notifications
You must be signed in to change notification settings - Fork 45
Database Troubleshooting
Home > Developer > DevOps > Database Troubleshooting
CHEFS uses the PostgreSQL database with high availability provided by Patroni. As CHEFS users increase the database grows both in size and the number of queries that it has to process. The queries must be very efficient, otherwise they will become a bottleneck, the load on the database will grow until it reaches the CPU limit, and then API calls will begin to fail.
Using the primary database pod, check if the pg_stat_statements
extension is installed:
SELECT * FROM pg_extension WHERE extname = 'pg_stat_statements';
If not then check that it's available:
SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements';
It should be there! If it isn't then you're on your own. To install the extension:
CREATE EXTENSION pg_stat_statements;
Now re-check that the extension is installed:
SELECT * FROM pg_extension WHERE extname = 'pg_stat_statements';
Doing a SELECT
for the view should fail:
SELECT * FROM pg_stat_statements;
SQL Error [55000]: ERROR: pg_stat_statements must be loaded via shared_preload_libraries
You need to edit the Patroni configuration, which is fun because Patroni uses a minimalist container that doesn't have an editor like ed
or vi
.
- Open a terminal for one of the database pods.
- Temporarily install
busybox
to use it as an editor:-
export EDITOR=/tmp/vi
-
curl https://busybox.net/downloads/binaries/1.35.0-x86_64-linux-musl/busybox --output $EDITOR
-
chmod 700 $EDITOR
-
- Run
patronictl edit-config
and addshared_preload_libraries: pg_stat_statements
underparameters
. This changes the file/home/postgres/pgdata/pgroot/data/patroni.dynamic.json
, and then updates/home/postgres/pgdata/pgroot/data/postgresql.conf
- Delete the editor:
rm $EDITOR
- Run
patronictl restart