Тюнинг конфигурации PostgreSQL под ваше железо.
Русский · Enterprise · Гопник · ⠃⠗⠁⠊⠇⠇⠑ (Braille) · Бабушка
yarn # установка зависимостей
yarn dev # запуск сервера разработки (порт 5173)
yarn test # запуск тестов
yarn lint # проверка форматирования
yarn build # сборка для продакшена# JSON (по умолчанию)
curl "https://domain/api/config?db_version=18&os_type=linux&db_type=web&total_memory=2&total_memory_unit=GB&cpus=2&connections=300&hd_type=ssd"
# Формат postgresql.conf
curl "https://domain/api/config?db_version=18&os_type=linux&db_type=web&total_memory=2&total_memory_unit=GB&cpus=2&connections=300&hd_type=ssd&format=conf"
# Формат ALTER SYSTEM
curl "https://domain/api/config?db_version=18&os_type=linux&db_type=web&total_memory=2&total_memory_unit=GB&cpus=2&connections=300&hd_type=ssd&format=alter"| Параметр | Значения | По умолчанию |
|---|---|---|
db_version |
12, 13, 14, 15, 16, 17, 18 | 18 |
os_type |
linux, windows, mac | linux |
db_type |
web, oltp, dw, desktop, mixed | web |
total_memory |
число | — |
total_memory_unit |
GB, MB | GB |
cpus |
число | — |
connections |
число (мин. 20) | — |
hd_type |
ssd, hdd, san | ssd |
format |
json, conf, alter | json |
Изменения в src/features/configuration/configurationSlice.js и api/config.js:
- Было: Всегда 25% RAM для всех типов нагрузки (кроме desktop — 6.25%)
- Стало: Для серверов с >64 ГБ RAM типы OLTP, DW и Mixed получают 40% RAM
- Причина: PostgreSQL wiki рекомендует до 40% для больших серверов, т.к. при большом объёме памяти больший shared_buffers снижает I/O и улучшает hit ratio
- Примеры:
- 2 ГБ RAM, web → 512 МБ (25%, без изменений)
- 128 ГБ RAM, web → 32 ГБ (25%, без изменений)
- 128 ГБ RAM, oltp → ~51.2 ГБ (40%, было 32 ГБ)
- Было: Возвращал
nullдля всех ОС кроме Linux - Стало: Возвращает значения для Windows начиная с PostgreSQL 13
- Причина: В PostgreSQL 13 добавлена поддержка
effective_io_concurrencyна Windows (коммит e73531e) - Значения: HDD=2, SSD=200, SAN=300 (аналогично Linux)
- macOS по-прежнему не поддерживается
- Было: Включался при общей RAM ≥ 32 ГБ
- Стало: Включается при shared_buffers ≥ 8 ГБ
- Причина: huge_pages влияют на производительность именно shared memory, а не всей RAM. Пороговое значение 8 ГБ shared_buffers — это точка, где TLB misses начинают заметно влиять на производительность
- Примеры:
- 2 ГБ RAM → shared_buffers=512МБ →
off - 64 ГБ RAM → shared_buffers=16ГБ →
try - 128 ГБ RAM, oltp → shared_buffers=51.2ГБ →
try
- 2 ГБ RAM → shared_buffers=512МБ →
- Было: Формула:
(RAM - shared_buffers) / ((connections + max_worker_processes) * 3) - Стало: Формула:
(RAM - shared_buffers) / ((connections + max_parallel_workers_per_gather) * 3) - Причина:
max_worker_processes— это общее количество фоновых воркеров (по умолчанию 8), аmax_parallel_workers_per_gather— реальный параллелизм на один запрос (обычно 2-4). Использование workers_per_gather точнее отражает потребление памяти на запрос
- Было: Предупреждение "this tool not being optimal for very high memory systems" при RAM > 100 ГБ
- Стало: Предупреждение убрано
- Причина: С улучшенным масштабированием shared_buffers инструмент корректно работает с большими объёмами памяти
Добавлены новые тесты (всего 33, было 26):
selectSharedBuffers: стандартный 25%, масштабирование до 40% для больших серверов, web остаётся на 25%selectHugePages: off при малом shared_buffers, try при ≥8ГБselectEffectiveIoConcurrency: Windows PG12 (null), Windows PG13 (200), macOS (null)
- Форкни репозиторий
- Создай ветку для фичи (
git checkout -b my-new-feature) - Закоммить изменения (
git commit -am 'Add some feature') - Запушь ветку (
git push origin my-new-feature) - Создай Pull Request
Основано на оригинальном pgtune от Greg Smith. Веб-версия: le0pard/pgtune от Oleksii Vasyliev.