From 15caf05a5b188ac66e23bbd0329af63d9008ff89 Mon Sep 17 00:00:00 2001 From: ahuston-0 Date: Fri, 25 Apr 2025 12:24:21 -0400 Subject: [PATCH] add postgres settings --- systems/palatine-hill/postgresql.nix | 99 ++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/systems/palatine-hill/postgresql.nix b/systems/palatine-hill/postgresql.nix index cc6bb58..9476e79 100644 --- a/systems/palatine-hill/postgresql.nix +++ b/systems/palatine-hill/postgresql.nix @@ -49,6 +49,105 @@ in }; } ]; + # Thank you NotAShelf + # https://github.com/NotAShelf/nyx/blob/d407b4d6e5ab7f60350af61a3d73a62a5e9ac660/modules/core/roles/server/system/services/databases/postgresql.nix#L74 + # commented out statements are likely overriden by pgtune settings + # https://pgtune.leopard.in.ua/?dbVersion=17&osType=linux&dbType=web&cpuNum=64&totalMemory=8&totalMemoryUnit=GB&connectionNum=1024&hdType=hdd + settings = { + # Connectivity; + # max_connections = 100; + superuser_reserved_connections = 3; + + # Memory Settings; + #shared_buffers = "1024 MB"; + #work_mem = "32 MB"; + #maintenance_work_mem = "320 MB"; + #huge_pages = "off"; + #effective_cache_size = "2 GB"; + #effective_io_concurrency = 100; # concurrent IO only really activated if OS supports posix_fadvise function; + #random_page_cost = 1.25; # speed of random disk access relative to sequential access (1.0); + + # Monitoring; + shared_preload_libraries = "pg_stat_statements,auto_explain"; # per statement resource usage stats & log explain statements for slow queries + track_io_timing = "on"; # measure exact block IO times; + track_functions = "pl"; # track execution times of pl-language procedures if any; + # Replication; + wal_level = "replica"; # consider using at least "replica"; + max_wal_senders = 0; + synchronous_commit = "on"; + + # Checkpointing: ; + checkpoint_timeout = "15 min"; + #checkpoint_completion_target = 0.9; + #max_wal_size = "1024 MB"; + #min_wal_size = "512 MB"; + + # WAL writing; + wal_compression = "on"; + wal_buffers = -1; # auto-tuned by Postgres till maximum of segment size (16MB by default); + wal_writer_delay = "200ms"; + wal_writer_flush_after = "1MB"; + + # Background writer; + bgwriter_delay = "200ms"; + bgwriter_lru_maxpages = 100; + bgwriter_lru_multiplier = 2.0; + bgwriter_flush_after = 0; + + # Parallel queries: ; + #max_worker_processes = 6; + #max_parallel_workers_per_gather = 3; + #max_parallel_maintenance_workers = 3; + #max_parallel_workers = 6; + parallel_leader_participation = "on"; + + # Advanced features ; + enable_partitionwise_join = "on"; + enable_partitionwise_aggregate = "on"; + jit = "on"; + + jit_above_cost = 100000; + jit_inline_above_cost = 150000; + jit_optimize_above_cost = 500000; + + # log slow queries + log_min_duration_statement = 100; + "auto_explain.log_min_duration" = 100; + + # logging configuration + log_connections = true; + log_statement = "all"; + logging_collector = true; + log_disconnections = true; + + # from pgtune + # DB Version: 17 + # OS Type: linux + # DB Type: web + # Total Memory (RAM): 8 GB + # CPUs num: 64 + # Connections num: 1024 + # Data Storage: hdd + + max_connections = 1024; + shared_buffers = "2GB"; + effective_cache_size = "6GB"; + maintenance_work_mem = "512MB"; + checkpoint_completion_target = 0.9; + #wal_buffers = "16MB"; allow auto-tuning as per above + default_statistics_target = 100; + random_page_cost = 4; + effective_io_concurrency = 2; + work_mem = "512kB"; + huge_pages = "off"; + min_wal_size = "1GB"; + max_wal_size = "4GB"; + max_worker_processes = 64; + max_parallel_workers_per_gather = 4; + max_parallel_workers = 64; + max_parallel_maintenance_workers = 4; + + }; refreshCollation = true; vacuumAnalyzeTimer.enable = true;