diff --git a/bundles/postgresql/files/postgresql.conf b/bundles/postgresql/files/postgresql.conf index 6414f3a..56fa5af 100644 --- a/bundles/postgresql/files/postgresql.conf +++ b/bundles/postgresql/files/postgresql.conf @@ -2,11 +2,7 @@ data_directory = '/var/lib/postgresql/${version}/main' hba_file = '/etc/postgresql/${version}/main/pg_hba.conf' ident_file = '/etc/postgresql/${version}/main/pg_ident.conf' external_pid_file = '/var/run/postgresql/${version}-main.pid' -% if version == '9.1': -unix_socket_directory = '/var/run/postgresql' -% else: unix_socket_directories = '/var/run/postgresql' -% endif port = 5432 listen_addresses = 'localhost' max_connections = ${max_connections} @@ -28,3 +24,9 @@ log_min_duration_statement = ${slow_query_log_sec*1000} % else: log_min_duration_statement = -1 % endif +effective_io_concurrency = ${effective_io_concurrency} +max_worker_processes = ${max_worker_processes} +% if version_list >= [10]: +max_parallel_workers = ${max_parallel_workers} +% endif +max_parallel_workers_per_gather = ${max_parallel_workers_per_gather} diff --git a/bundles/postgresql/items.py b/bundles/postgresql/items.py index 8e2a824..48b67b4 100644 --- a/bundles/postgresql/items.py +++ b/bundles/postgresql/items.py @@ -43,7 +43,10 @@ files = { }, "/etc/postgresql/{}/main/postgresql.conf".format(postgresql_version): { 'content_type': 'mako', - 'context': node.metadata['postgresql'], + 'context': { + 'version_list': [int(i) for i in node.metadata['postgresql']['version'].split('.')], + **node.metadata['postgresql'], + }, 'owner': 'postgres', 'group': 'postgres', 'needs': { diff --git a/bundles/postgresql/metadata.py b/bundles/postgresql/metadata.py index 3154022..1d1410c 100644 --- a/bundles/postgresql/metadata.py +++ b/bundles/postgresql/metadata.py @@ -77,3 +77,27 @@ def default_postgresql_version_for_debian(metadata): 'version': version_to_be_installed, }, } + + +@metadata_reactor.provides( + 'postgresql/effective_io_concurrency', + 'postgresql/max_worker_processes', + 'postgresql/max_parallel_workers', + 'postgresql/max_parallel_workers_per_gather', +) +def worker_processes(metadata): + return { + 'postgresql': { + # This is the amount of parallel I/O Operations the + # postgresql process is allowed to do on disk. We set + # this to max_connections by default. + 'effective_io_concurrency': metadata.get('postgresql/max_connections'), + + # Try to request one worker process per 10 configured + # connections. The default is 8 for both of these values. + 'max_worker_processes': int(metadata.get('postgresql/max_connections')/10), + 'max_parallel_workers': int(metadata.get('postgresql/max_connections')/10), + # default 2 + 'max_parallel_workers_per_gather': max(int(metadata.get('postgresql/max_connections')/100), 2), + }, + }