5
0
mirror of https://github.com/spantaleev/matrix-docker-ansible-deploy.git synced 2026-07-17 15:26:41 +00:00

Make postgres_max_connections scale with the Synapse worker count

With workers enabled, every Synapse process (the main one and each
worker) maintains its own database connection pool of up to
matrix_synapse_database_cp_max (default: 10) connections. The previous
fixed limit of 500 left little headroom on setups running many workers,
where exhausting it manifests as degraded performance and, reportedly,
E2EE misbehavior.

Size the limit as a 200-connection baseline (for everything else that
talks to Postgres) plus cp_max connections per Synapse process, never
going below the previous value of 500. The stock worker presets stay at
500; setups that raise worker counts (or cp_max) get a limit that grows
accordingly. The new matrix_synapse_workers_total_count variable
reflects what the matrix_synapse_workers_*_count variables ask for; it
does not reflect a manually populated
matrix_synapse_workers_enabled_list, and such setups should override
postgres_max_connections themselves.

Fixes #4442

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Slavi Pantaleev
2026-07-16 14:19:33 +03:00
parent 7a719aed5b
commit 73a52c8a24
2 changed files with 26 additions and 1 deletions
@@ -1239,6 +1239,25 @@ matrix_synapse_workers_background_workers_container_arguments: []
# `run_background_tasks_on` is meant to point to a worker, which is dedicated to processing background tasks.
matrix_synapse_run_background_tasks_on: "{{ (matrix_synapse_workers_enabled_list | selectattr('type', 'equalto', 'background') | list)[0].name if (matrix_synapse_workers_enabled and matrix_synapse_workers_enabled_list | selectattr('type', 'equalto', 'background') | list | length > 0) else '' }}"
# matrix_synapse_workers_total_count reflects the total number of Synapse worker processes that the `matrix_synapse_workers_*_count` variables ask for.
# This is useful for sizing resources that depend on the number of Synapse processes (e.g. the maximum number of Postgres connections).
# Note: if `matrix_synapse_workers_enabled_list` is populated manually (instead of via the count variables), this count does not reflect it.
matrix_synapse_workers_total_count: |
{{
(matrix_synapse_workers_room_workers_count | int)
+ (matrix_synapse_workers_sync_workers_count | int)
+ (matrix_synapse_workers_client_reader_workers_count | int)
+ (matrix_synapse_workers_federation_reader_workers_count | int)
+ (matrix_synapse_workers_generic_workers_count | int)
+ (matrix_synapse_workers_pusher_workers_count | int)
+ (matrix_synapse_workers_federation_sender_workers_count | int)
+ (matrix_synapse_workers_media_repository_workers_count | int)
+ (matrix_synapse_workers_appservice_workers_count | int)
+ (matrix_synapse_workers_user_dir_workers_count | int)
+ (matrix_synapse_workers_background_workers_count | int)
+ (matrix_synapse_workers_stream_writers | length)
}}
# Default list of workers to spawn.
#
# Unless you populate this manually, this list is dynamically generated