Size: a a a

pgsql – PostgreSQL

2021 January 30

SS

Shamil Sabirov in pgsql – PostgreSQL
Yaroslav Schekin
А какая OS? Её настраивали (по документации)?
И я что-то версию PostgreSQL забыл спросить. ;)
centos. настроено как нужно. ну хотя это в общем случае. для сервера СУБД есть какието отдельные настройки?
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
postgre 12
источник

VY

Victor Yegorov in pgsql – PostgreSQL
a m
Наверное, я слишком скучно живу, и слишком скучные запросы делаю. Никогда вообще ничего подобного не замечал. Иногда долгий SELECT пишет гигабайты ерунды на диск, но не более того.
https://wiki.postgresql.org/wiki/Hash_Join — первый же пункт
если пройти по письмам можно прийти сюда: https://www.postgresql.org/message-id/flat/20190504003414.bulcbnge3rhwhcsh@development — в первом письме есть отсылка на оригинальный bug-report

у меня есть свидетельства такого поведения на практике
источник
2021 January 31

YS

Yaroslav Schekin in pgsql – PostgreSQL
Shamil Sabirov
centos. настроено как нужно. ну хотя это в общем случае. для сервера СУБД есть какието отдельные настройки?
Т.е. показать что-то конкретное в этом отношении Вы не можете или не хотите?

> для сервера СУБД есть какието отдельные настройки?

Да. Начиная с этого пункта: https://www.postgresql.org/docs/current/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT
Если этого не было сделано, то Вы можете неплохо терять в производительности.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
a m
Наверное, я слишком скучно живу, и слишком скучные запросы делаю. Никогда вообще ничего подобного не замечал. Иногда долгий SELECT пишет гигабайты ерунды на диск, но не более того.
Вполне может быть. На тривиальных запросах этим эффектам негде "развернуться".
источник

am

a m in pgsql – PostgreSQL
Victor Yegorov
https://wiki.postgresql.org/wiki/Hash_Join — первый же пункт
если пройти по письмам можно прийти сюда: https://www.postgresql.org/message-id/flat/20190504003414.bulcbnge3rhwhcsh@development — в первом письме есть отсылка на оригинальный bug-report

у меня есть свидетельства такого поведения на практике
Ой, а ведь совсем просто: надо только по-хеш-джоинить 100 миллионов строк.
Но, кажется, я никогда такого не делал.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
a m
Ой, а ведь совсем просто: надо только по-хеш-джоинить 100 миллионов строк.
Но, кажется, я никогда такого не делал.
ну… находчивые товарищи всегда находятся!
источник

am

a m in pgsql – PostgreSQL
И жалуются потом, что мультимастера не завезли?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
a m
И жалуются потом, что мультимастера не завезли?
жаловаться одно, а вот объяснить на фактах — это другое
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
Yaroslav Schekin
> Postgres ессно тюнили.

Показать настройки можете?

> на сервер СУБД выделено 128GB оперативки

Это немного (вот лет десять или более назад это было бы прилично, если не путаю — плохая у меня память на эти вещи).
Т.е. "заваливать железом" можно ещё долго.
приложу наш конфиг СУБД
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
это СУБД без репликаций
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Shamil Sabirov
приложу наш конфиг СУБД
самое первое с чего начинать — выносить базу из VM. вам не нужны никакие прослойки, особенно когда ресурсов не хватает
источник

am

a m in pgsql – PostgreSQL
> wal_compression = on
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
это да. ну тут без вариантов - зависим от заказчиков. на их серверах все развернуто. ну и так то вопрос не по мощностям и виртуалкам. вопрос почему Postgres съедает всю память. даже если не виртуалка там была бы он все равно бы так сделал...
источник

VY

Victor Yegorov in pgsql – PostgreSQL
надо настраивать:
- bgwriter (максимум)
- checkpoint_timeout хотя бы 1 час
- max_wal_size — размер записи в час, думаю хотя бы 16GB
- log_directory = 'log' — следует вынести логи из директории базы, желательно на отдельный раздел
- тупо включаем
 log_checkpoints = on
 log_min_duration_statement = 1s
 log_lock_waits = on
 log_temp_files = 0
 track_activity_query_size = 8192
 pg_stat_statements.max = 10000
 log_autovacuum_min_duration = 1s
 autovacuum_naptime = 1s
 
сколько у вас ядер доступно?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Shamil Sabirov
приложу наш конфиг СУБД
shared_buffers = 32GB # А сама база (а лучше, hot data) какого размера?
effective_io_concurrency = 0 # Жестоко. Почему так?

max_parallel_workers_per_gather = 20 # Это какое-то безумие почти для всех нагрузок, Вы меня извините
max_parallel_workers = 40 # Особенно в сочетании вот с этим

max_wal_size = 4GB # А точно этого хватает для типичной нагрузки?
min_wal_size = 1GB # В логе есть что-то про checkpoints?

random_page_cost = 4.0 # Опять-таки, см. shared_buffers. И какие диски, кстати?
effective_cache_size = 60GB # Хотя у Вас 128 Гб памяти? Маловато, почти наверняка.

dynamic_shared_memory_type = posix  # Обычно это просто не нужно... почему указано?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Shamil Sabirov
это да. ну тут без вариантов - зависим от заказчиков. на их серверах все развернуто. ну и так то вопрос не по мощностям и виртуалкам. вопрос почему Postgres съедает всю память. даже если не виртуалка там была бы он все равно бы так сделал...
> вопрос почему Postgres съедает всю память.

Вот если бы он этого не делал, это была бы проблема, я совершенно серьёзно.
RAM в сервер покупают не для красоты.
источник

am

a m in pgsql – PostgreSQL
Shamil Sabirov
это да. ну тут без вариантов - зависим от заказчиков. на их серверах все развернуто. ну и так то вопрос не по мощностям и виртуалкам. вопрос почему Postgres съедает всю память. даже если не виртуалка там была бы он все равно бы так сделал...
Вопрос из разряда «совсем за дураков держу»: а вы точно про свободную оперативную память в линуксе правильно понимаете?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
полагаю что в системе context switches зашкаливают, вместе с fork rate. и %sy, вероятно, значимый
источник