improving postgres wal

This commit is contained in:
2026-03-28 20:28:35 -04:00
parent 261ff139f7
commit dda318753b
3 changed files with 14 additions and 0 deletions

View File

@@ -22,6 +22,7 @@ sudo zfs create media/secure/github-runners -o compression=zstd-9 -o sync=disabl
sudo zfs create media/secure/home_assistant -o compression=zstd-19 sudo zfs create media/secure/home_assistant -o compression=zstd-19
sudo zfs create media/secure/notes -o copies=2 sudo zfs create media/secure/notes -o copies=2
sudo zfs create media/secure/postgres -o recordsize=16k -o primarycache=metadata sudo zfs create media/secure/postgres -o recordsize=16k -o primarycache=metadata
sudo zfs create media/secure/postgres-wal -o recordsize=32k -o primarycache=metadata -o special_small_blocks=32K -o compression=lz4 -o secondarycache=none -o logbias=latency
sudo zfs create media/secure/services -o compression=zstd-9 sudo zfs create media/secure/services -o compression=zstd-9
sudo zfs create media/secure/share -o mountpoint=/zfs/media/share -o exec=off sudo zfs create media/secure/share -o mountpoint=/zfs/media/share -o exec=off

View File

@@ -5,6 +5,18 @@ in
{ {
networking.firewall.allowedTCPPorts = [ 5432 ]; networking.firewall.allowedTCPPorts = [ 5432 ];
# Symlink pg_wal to a ZFS dataset on the special (metadata) vdev for fast WAL writes
systemd.services.postgresql.preStart = pkgs.lib.mkAfter ''
if [ ! -L "${vars.database}/postgres/pg_wal" ] && [ -d "${vars.database}/postgres/pg_wal" ]; then
echo "Moving pg_wal to ${vars.postgres_wal} and creating symlink..."
cp -a "${vars.database}/postgres/pg_wal/." "${vars.postgres_wal}/"
rm -rf "${vars.database}/postgres/pg_wal"
ln -s "${vars.postgres_wal}" "${vars.database}/postgres/pg_wal"
elif [ ! -e "${vars.database}/postgres/pg_wal" ]; then
ln -s "${vars.postgres_wal}" "${vars.database}/postgres/pg_wal"
fi
'';
services.postgresql = { services.postgresql = {
enable = true; enable = true;
package = pkgs.postgresql_17_jit; package = pkgs.postgresql_17_jit;

View File

@@ -6,6 +6,7 @@ in
{ {
inherit zfs_media zfs_storage zfs_scratch; inherit zfs_media zfs_storage zfs_scratch;
database = "${zfs_media}/database"; database = "${zfs_media}/database";
postgres_wal = "${zfs_media}/postgres-wal";
docker = "${zfs_media}/docker"; docker = "${zfs_media}/docker";
docker_configs = "${zfs_media}/docker/configs"; docker_configs = "${zfs_media}/docker/configs";
home_assistant = "${zfs_media}/home_assistant"; home_assistant = "${zfs_media}/home_assistant";