сможет подсказать как ее можно решить.
Суть проблемы:
Есть таблица XXX размером 260GB. Если выполнять запрос вида:
SELECT date, count(*) FROM XXX GROUP BY date;
то он выходит за рамки work_mem, не использует временные файлы и в конце концов утилизирует всю память на сервере. Параллелизм выключен, запрос работает в один поток.
Потом приходит OOM Killer и принудительно завершает процесс.
Почему такой запрос выходит за рамки work_mem и не использует временные файлы?
Про оптимизацию запроса речь не идет…
name | setting | unit
----------+---------+------+
work_mem | 297 | kB
При work_mem ≤ ~297kB база не падает и не сжирает всю память а работает с temp
/….._temp (postgresql.conf temp_tablespaces = temp_space)
2 12:34:11 2019 48M /…._temp
2 12:34:28 2019 76M /….._temp
2 12:35:01 2019 137M /….._temp
> Почему такой запрос выходит за рамки work_mem и не использует временные файлы? Потому что work_mem ни в кое случае не является жёстким ограничением. Т.е. смотрите план запроса (обычный EXPLAIN). > Потом приходит OOM Killer и принудительно завершает процесс. А это — ошибка в настройке OS.
Обсуждают сегодня