Skip to content

feat(postgres): max_locks_per_transaction naar 1024 voor in-cluster Postgres - #158

Draft
rubenvdlinde wants to merge 1 commit into
mainfrom
feat/postgres-max-locks
Draft

rubenvdlinde wants to merge 1 commit into
mainfrom
feat/postgres-max-locks

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Collaborator

Wat

values/db/postgres.yaml zet max_locks_per_transaction = 1024 (default 64) via postgresql.primary.extendedConfiguration van de Bitnami-subchart. De chart rendert dat als ConfigMap nextcloud-postgresql-extended-configuration, gemount op /bitnami/postgresql/conf/conf.d/.

Aanleiding: bij de generale repetitie van demogemeente Zuiddrecht (NC 32.0.13, verse installatie) gaf OpenRegister out of shared memory, increase max_locks_per_transaction. OpenRegister zet elk schema in een eigen tabel en zoekt met één UNION over al die tabellen; elke tabel en elke index kost een lock in één transactie. Daar waren het ~1.329 tabellen.

Gemeten

Op het image van de vloot, ghcr.io/conductionnl/nextcloud-images:postgres16-ext-sha-8abef67 (digest sha256:7478927e…), lokaal in docker, met de setting op dezelfde mount als de chart:

Meting 64 1024
UNION over 1.329 tabellen met 4 relaties per tabel (6.647 locks) slaagt slaagt
UNION over 1.329 tabellen met 9 relaties per tabel (11.963 locks) ERROR: out of shared memory + HINT slaagt
shared_memory_size 143MB 189MB

Ook gemeten: een bestaand datavolume, eerst gestart zonder en daarna met de ConfigMap op conf.d, komt op 1024 op. De setting werkt dus ook voor bestaande tenants, niet alleen bij initdb.

De +46MB valt binnen de limiet van 512Mi uit values/common.yaml.

Blast radius

Gerenderd zoals in #138: per tenantbestand eerst het inline values-blok van de ApplicationSet (helm als template-engine), daarna helm template met chart nextcloud 8.9.0 en dezelfde valueFiles-volgorde, op main en op deze branch.

  • 89 tenants gerenderd; de values van de ApplicationSet zijn voor alle 89 byte voor byte gelijk.
  • De manifests van de 14 tenants op mariadb en external zijn byte voor byte gelijk.
  • De 75 tenants op dbType: postgres krijgen alle 75 exact dezelfde toevoegingen en niets anders: de ConfigMap, de annotatie checksum/extended-configuration op de pod-template van de Postgres-StatefulSet, het volume en de volumeMount.

Gevolg: elke in-cluster Postgres herstart één keer bij de sync. Tijdens die herstart is de tenant kort zonder database.

Gedraaid

Commando Exit
nextcloud-platform/scripts/validate-values.sh 0
nextcloud-platform/tests/run-tests.sh 0
scripts/verify.sh 0
pre-commit run --all-files --hook-stage pre-push 0
render van alle 89 tenants, main tegen deze branch zie Blast radius

Niet gedraaid: conftest, kube-score, kubeconform los (zit in smoke-checks.sh via verify.sh). Niets tegen een cluster.

Te beslissen

  • Vloot of alleen Zuiddrecht. Dit staat in values/db/postgres.yaml, dus alle 75 postgres-tenants herstarten hun database. Wie alleen Zuiddrecht nu wil helpen, zet hetzelfde blok in tenant-zuiddrecht-prod.yaml (tenantwijziging, mag altijd):
    postgresql:
      primary:
        extendedConfiguration: |
          max_locks_per_transaction = 1024
    Elke tenant met OpenRegister en veel schema's kan dezelfde fout krijgen, daarom stelt deze PR de vloot voor.
  • De hoogte. 1024 is ruim; volgens de meting zou 256 voor deze 11.963 locks ook genoeg zijn (ongeveer een kwart van de extra 46MB). Het werkelijke aantal indexen per OpenRegister-tabel is niet gemeten op de repetitie.
  • dbType: external draait op het gedeelde cluster uit platform/postgres/cluster.yaml (CNPG) en valt hier buiten. Dat cluster heeft max_connections: 500, dus een veel grotere lock-tabel bij dezelfde 64; niet aangepast.

Volgorde

Platformwijziging, label change/platform, mergen ma tot do na 17:00. Canary (wave 0) eerst; daarna schuift de scheduled merge de refs op.

🤖 Generated with Claude Code

…ostgres

OpenRegister zoekt met één UNION over al zijn schematabellen. Bij ~1.329
tabellen loopt de default van 64 locks per transactie vol en geeft
Postgres 'out of shared memory'. Gemeten op het tenant-image: 11.963
locks faalt op 64 en slaagt op 1024, voor 46MB extra shared memory.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant