|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
Система: 1Cpu, 1Gb RAM, 30GB HDD, Ubuntu 16.04 64bit, Postgresql 10.4 Настройки по памяти уже занизил до смешных. Вот основные незакомментированные параметры из postgresql.conf: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Postgres перезапускал после изменения настроек. Далее в psql ввожу: analyze my_table; # в таблице около 8млн записей Запрос некоторое время работает. Процесс постгреса начинает отжирать 26% памяти: Код: plaintext 1.
И OOM Killer убиват постгрес: Код: plaintext 1.
Не понимаю почему OOM Killer просыпается - памяти вроде хватает? И, главное, почему запрос ANALYZE отъедает так много памяти при низких настройках? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 12:25 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
Снизил настройки по памяти еще: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 12:34 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
maintance_work_mem=-1 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 13:10 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
А, вижу. maintenance_work_mem = 4MB Вроде только это влияет. work_mem тут не при чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 13:11 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
Синий Слон, default_statistics_target = 1000 Сознательно увеличили (по умолчанию 100) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 14:33 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
Павел Лузановdefault_statistics_target = 1000 Сознательно увеличили (по умолчанию 100) ? Да. Сотни мало оказалось для таблицы 5млн (сейчас уже 8млн) строк. Планировщик неоптимально работал. Мне с этим вопросом Maxim Boguk помог: http://www.sql.ru/forum/1296850/kak-uskorit-select-s-vysokoy-variativnostu-vysokoselektivnyh-where-i-sortirovkoy . Синий Слон, методом проб обнаружил, что при моих изначальных параметрах shared_buffers дразнил OOM Killer во время analyze. Поставил shared_buffers=80MB и норм. А вот при 100MB - уже валится. Почему так мало на машине с 1GB - наверное из-за других сервисов в системе (Nginx, UWSGI+Django, демон на питоне). Но все-таки я не понимаю почему процесс запроса "ANALYZE my_table;" пожирает до 36% памяти ~ 360MB, в то время как в настройках все значения скромнее. При текущих shared_buffers + maintenance_work_mem + temp_buffers + work_mem = 80 + 64 + 8 + 4 = 156 MB, но никак не 360. 200 MB - большая разница, чтобы считать накладными расходами на C runtime, стек и т.п. Почему постгрес это позволяет? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 16:09 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
alega19, сильно сомневаюсь, что analyze в принципе обращает внимание на work_mem или maintenance_work_mem, не нашёл упоминаний в исходнике. И, тем более, вряд ли умеет скатываться во временные файлы как-то иначе кроме как через системный swap, которого у вас похоже вовсе нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 16:41 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
Melkij, Ну как выяснилось для analyze важен shared_buffers. Который сейчас = 80MB, а процесс аналайза занимает 360MB, что для меня загадка. А своп и правда отсутствует. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 17:41 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
alega19, не выяснилось. shared_buffers - это персистентно занятый при старте базы кусок памяти. И в нём временные данные analyze не размещает. работает в памяти backend'а. Чем больше доступной памяти занято - тем, естественно, меньше свободной и тем раньше придёт OOM. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 17:44 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
Melkij, понятно. Т.е. shared_buffers дал побочный эффект. Но тогда не ясно как ограничить память для analyze. Не буду же я вручную каждую ночь уменьшать shared_buffers, чтобы влез analyze, вызывать его и возвращать память обратно в shared_buffers? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 18:29 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
alega19Melkij, понятно. Т.е. shared_buffers дал побочный эффект. Но тогда не ясно как ограничить память для analyze. Не буду же я вручную каждую ночь уменьшать shared_buffers, чтобы влез analyze, вызывать его и возвращать память обратно в shared_buffers? Ммм не запускать серьезную базу на кофемолке. Сейчас на смартфонах памяти больше чем у вас. Смешно. Сервер с меньше чем 16GB - по нынешним временам смысла не имеет. PS: добавьте в систему 4GB swap чтобы OOM killer не вылезал когда не просят и успокойтесь. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 18:58 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
alega19, 1CPU? Для базы у которой пяток фоновых процессов работает?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 19:35 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
Ну ясно, что кофемолка. Я же только разобраться хотел как и что можно тюнить и пока этого хватало. Думал, что и analyze усмирить можно. Спасибо, что про своп напомнили. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 21:23 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
vyegorovalega19, 1CPU? Для базы у которой пяток фоновых процессов работает?.. Вы не поверите, но и для пяти сотен фоновых процессов хватит одного процессора (ядра). Вопрос только в том, сколько времени им нужно работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 22:57 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
Scott Tiger, Это понятно. Но потому и пишу, что работать этим процессам надо, если база нагружается. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2018, 23:18 |
|
OOM Killer убивает Postgres при ANALYZE
|
|||
---|---|---|---|
#18+
alega19Ну ясно, что кофемолка. Я же только разобраться хотел как и что можно тюнить и пока этого хватало. Думал, что и analyze усмирить можно. Спасибо, что про своп напомнили.С другой стороньі 18.4.4. Linux Memory Overcommit Соответствующий юнит systemd на CentOS7 для 11beta2 уже содержит все нужньіе настройки. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2018, 07:24 |
|
|
start [/forum/topic.php?fid=53&msg=39677795&tid=1995659]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 417ms |
0 / 0 |