сможет подсказать как ее можно решить.
                  
                  
                  Суть проблемы:
                  
                  
                  Есть таблица 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.
Обсуждают сегодня