machines/bc01n05: postgres tuning

Change-Id: I30925a84216b45bde9e92b67b007f15b2cdf58e8
Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1481
Reviewed-by: q3k <q3k@hackerspace.pl>
diff --git a/cluster/machines/bc01n05.hswaw.net.nix b/cluster/machines/bc01n05.hswaw.net.nix
index 84819f6..d2b4da0 100644
--- a/cluster/machines/bc01n05.hswaw.net.nix
+++ b/cluster/machines/bc01n05.hswaw.net.nix
@@ -1,14 +1,16 @@
 { config, pkgs, lib, ... }:
 
 with builtins;
-let postgresPkg = pkgs.postgresql_14;
+let
+  postgresPkg = pkgs.postgresql_14;
+  numCPUs = 16;
 in rec {
   networking.hostName = "bc01n05";
   # TODO: undefine fqdn and define domain after big nix change
   hscloud.base.fqdn = "${networking.hostName}.hswaw.net";
   #networking.domain = "hswaw.net";
   system.stateVersion = "22.05";
-  nix.maxJobs = 16;
+  nix.maxJobs = numCPUs;
 
   ### zfs
   # randomly generated
@@ -53,6 +55,24 @@
     package = postgresPkg;
     enableTCPIP = true;
     initdbArgs = ["--encoding='UTF8'" "--lc-collate='C'" "--lc-ctype='C'"];
+    settings = {
+      max_connections = 300;
+      shared_buffers = "4GB";
+      temp_buffers = "64MB";
+      work_mem = "64MB";
+      maintenance_work_mem = "258MB";
+      effective_io_concurrency = 10;  # ssd, guess
+      maintenance_io_concurrency = 100; # ssd, guess
+      max_worker_processes = numCPUs;
+      max_parallel_workers = numCPUs;
+      max_parallel_maintenance_workers = 4;
+      wal_level = "logical";
+      wal_sync_method = "fsync"; # slightly faster (per pg_test_fsync) AND safer
+      full_page_writes = "off"; # partial writes impossible on zfs
+      wal_init_zero = "off"; # useless on CoW
+      wal_recycle = "off";  # same
+      random_page_cost = 2.0; # ssd, TODO maybe even lower?
+    };
     ensureDatabases = ["synapse" "mediarepo"];
     ensureUsers = [
       {