Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions changelog.d/postgres-max-locks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
### Gewijzigd — 2026-10-15 (Postgres: max_locks_per_transaction naar 1024)

`values/db/postgres.yaml` zet `max_locks_per_transaction = 1024` via
`postgresql.primary.extendedConfiguration`; de default was 64. OpenRegister zoekt
met één UNION over al zijn schematabellen, en bij ~1.329 tabellen gaf dat
`out of shared memory, increase max_locks_per_transaction` (gezien bij de
generale repetitie van demogemeente Zuiddrecht).

Gemeten op `postgres16-ext-sha-8abef67`: 1.329 tabellen met 8 indexen (11.963
locks in één transactie) faalt op 64 en slaagt op 1024. `shared_memory_size`
gaat van 143MB naar 189MB, binnen de geheugenlimiet van 512Mi.

Blast radius: alle tenants met `dbType: postgres` krijgen een nieuwe ConfigMap
`nextcloud-postgresql-extended-configuration` en een nieuwe checksum-annotatie op
de StatefulSet, dus elke in-cluster Postgres herstart één keer. Tenants op
`dbType: external` en `mariadb` veranderen niet.
16 changes: 16 additions & 0 deletions docs/DATABASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,22 @@ The custom image (`conduction2022/nextcloud-images:postgres16-ext-*`) includes:
- Additional extensions for performance
- Optimized settings for Nextcloud

### Lock-tabel (`max_locks_per_transaction`)

`values/db/postgres.yaml` zet via `postgresql.primary.extendedConfiguration`
`max_locks_per_transaction = 1024` (default 64). OpenRegister zoekt met één
UNION over al zijn schematabellen, en elke tabel plus elke index kost een lock
in één transactie. Met ~1.329 tabellen gaf 64 `out of shared memory`.

Kosten: ongeveer 46MB extra shared memory per Postgres-pod (143MB naar 189MB
`shared_memory_size`, gemeten op het image). Een wijziging van deze waarde
herstart Postgres, voor elke postgres-tenant tegelijk als hij in dit bestand
staat. Een tenant kan hem ook alleen voor zichzelf zetten met hetzelfde blok in
zijn tenantbestand.

Geldt niet voor `dbType: external`: die tenants draaien op het gedeelde
cluster uit `platform/postgres/cluster.yaml`, dat zijn eigen parameters heeft.

### Secret Creation

```bash
Expand Down
18 changes: 18 additions & 0 deletions nextcloud-platform/values/db/postgres.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,24 @@ postgresql:
failureThreshold: 3
successThreshold: 1

# -------------------------------------------------------------------------
# Lock-tabel: max_locks_per_transaction 64 -> 1024
# -------------------------------------------------------------------------
# OpenRegister zet elk schema in een eigen tabel (magic tables) en zoekt
# over schema's heen met één UNION. Elke tabel en elke index daarvan kost
# een lock in één transactie. Bij ~1.329 tabellen gaf de default 64:
# ERROR: out of shared memory
# HINT: You might need to increase max_locks_per_transaction.
# Gemeten 2026-10-15 op dit image: 1.329 tabellen met 8 indexen (11.963
# locks) faalt op 64 en slaagt op 1024.
#
# Kosten: de lock-tabel staat in shared memory. shared_memory_size gaat van
# 143MB naar 189MB (+46MB, gemeten), binnen de limiet van 512Mi uit
# common.yaml. Vraagt een herstart van Postgres; de chart zet daarvoor een
# checksum-annotatie op de StatefulSet.
extendedConfiguration: |
max_locks_per_transaction = 1024

initdb:
scripts:
01-enable-extensions.sql: |
Expand Down
Loading