mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 10:59:59 +00:00
GitLab's migration on its dedicated postgres sidecar failed with "ERROR: out of shared memory" and the hint to raise max_locks_per_transaction. The default of 64 locks per transaction cannot cover a schema that locks thousands of tables and indexes in one transaction: a reproduction on postgres:18 failed at table 7453 with the default and held 20000 tables at 256.
The value sits next to the other postgres tuning constants in group_vars/all/17_resource.yml and reaches both the central svc-db-postgres command and the per-app sidecar. The sidecar's new command keeps the image entrypoint and only adds the flag. The shared lock table grows to about 256 x max_connections entries, roughly 30 MB at the 400-connection cap.
Ported from 7690d2ca6d on feature/store-i18n, which kept the constant in the resource lookup that main no longer has.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
32 lines
1.3 KiB
Django/Jinja
32 lines
1.3 KiB
Django/Jinja
{% include 'roles/sys-svc-compose/templates/base.yml.j2' %}
|
|
{% set service_name = 'postgres' %}
|
|
{{ service_name }}:
|
|
{{ lookup('compose_only', 'container_name', POSTGRES_CONTAINER) }}
|
|
{{ lookup('container_image', application_id, 'postgres') }}
|
|
{{ lookup('template', 'roles/sys-svc-container/templates/build.yml.j2') | indent(4) }}
|
|
command:
|
|
- "postgres"
|
|
- "-c"
|
|
- "max_connections={{ POSTGRES_MAX_CONNECTIONS }}"
|
|
- "-c"
|
|
- "superuser_reserved_connections={{ POSTGRES_SUPERUSER_RESERVED_CONNECTIONS }}"
|
|
- "-c"
|
|
- "shared_buffers={{ POSTGRES_SHARED_BUFFERS }}"
|
|
- "-c"
|
|
- "work_mem={{ POSTGRES_WORK_MEM }}"
|
|
- "-c"
|
|
- "maintenance_work_mem={{ POSTGRES_MAINTENANCE_WORK_MEM }}"
|
|
- "-c"
|
|
- "max_locks_per_transaction={{ POSTGRES_MAX_LOCKS_PER_TRANSACTION }}"
|
|
|
|
{% include 'roles/sys-svc-container/templates/base.yml.j2' %}
|
|
{{ lookup('container_healthcheck', service_name) | indent(4) }}
|
|
{% if POSTGRES_EXPOSE_LOCAL %}
|
|
{{ lookup('container_ports', ['postgres', 'postgres', DOCKER_BIND_HOST]) | indent(4) }}
|
|
{% endif %}
|
|
{{ lookup('container_volumes', service_name) | indent(4) }}
|
|
{{ lookup('container_networks') | indent(4) }}
|
|
|
|
{{ lookup('compose_volumes') }}
|
|
{{ lookup('compose_networks') }}
|