# Postgres 1C ZFS

## **Рекомендуемые тесты `fio` для ZFS + PostgreSQL**

### **(1) Тест случайных операций 4K (OLTP-нагрузка)**

<div class="md-code-block md-code-block-dark" id="bkmrk-bash"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">bash</span></div></div></div></div></div>```
fio --name=randrw --filename=/postrass/testfile --rw=randrw --bs=4k --size=1G --numjobs=4 --iodepth=32 --runtime=60 --time_based --group_reporting --ioengine=libaio --direct=1
```

- **`numjobs=4`** – имитация многопоточной нагрузки (как в реальной работе PostgreSQL).
- **`iodepth=32`** – глубина очереди (важно для SSD/NVMe).

### **(2) Тест последовательной записи 128K (большие блоки)**

<div class="md-code-block md-code-block-dark" id="bkmrk-bash-1"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">bash</span></div><div class="d2a24f03"><div class="efa13877">  
</div></div></div></div></div></div>```
fio --name=seqwrite --filename=/postrass/testfile --rw=write --bs=128k --size=1G --numjobs=1 --iodepth=1 --runtime=60 --time_based --group_reporting --ioengine=posixaio
```

- Проверяет, как ZFS обрабатывает **большие блоки (например, при загрузке данных или бэкапах)**.

### **(3) Тест случайных операций 128K (соответствует `recordsize`)**

<div class="md-code-block md-code-block-dark" id="bkmrk-bash-2"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">bash</span></div><div class="d2a24f03"><div class="efa13877">  
</div></div></div></div></div></div>```
fio --name=randrw_128k --filename=/postrass/testfile --rw=randrw --bs=128k --size=1G --numjobs=4 --iodepth=32 --runtime=60 --time_based --group_reporting --ioengine=libaio --direct=1
```

- Покажет, насколько эффективно ZFS обрабатывает **блоки, близкие к `recordsize`**.

##   
Установка Postgres

[Великолепная сатья по установке 1С на linux от рарус](https://rarus.ru/publications/20210927-ot-ekspertov-ustanovka-1c-linux-496320/)  
  
В статье указана устаревшая ссылка на скрипт установки PGPro, вот новая:  
wget [https://repo.postgrespro.ru/pg1c-14/keys/pgpro-repo-add.sh](https://repo.postgrespro.ru/pg1c-14/keys/pgpro-repo-add.sh)

Получить PostgresPro бесплатно можно на сайте [1c.postgres.ru](https://1c.postgres.ru/)  
[Рекомендации от posgrespro для 1С](https://postgrespro.ru/docs/postgrespro/14/config-one-c)

[Полезное для linux+postgres](https://habr.com/ru/post/590599/)  
[Postgres + PGAF (Failover за Postgres)](https://habr.com/ru/post/664858/)  
[Советы от Гилёва по части PostgreSQL](http://www.gilev.ru/postgresql/)  
[Неплохая статья с примером обслуживания базы](https://angald.ru/postgres-pro-1c-na-debian-11/)  
[Настройка PostgreSQL для 1С](https://infostart.ru/1c/articles/325482/)

## Основные моменты ZFS

В postgres:

```plaintext
full_page_writes = off
```

<div class="code-toolbar" id="bkmrk-copy-1"><div class="toolbar">  
</div></div>По [ссылке](https://bun.uptrace.dev/postgres/tuning-zfs-aws-ebs.html#basic-zfs-setup) дано объяснение по каждому из пунктов. В частности почему размер блока стоит делать побольше, и почему не надо делать logbias=throughput

## Параметры ядра для postgres

```plaintext
vm.swappiness=1
kernel.sched_migration_cost_ns = 5000000
kernel.sched_autogroup_enabled = 0
vm.dirty_background_bytes = 67108864
vm.dirty_bytes = 536870912
vm.zone_reclaim_mode = 0
```