проблемы?
если я его задам в 8Гб при 16Гб оперативки к примеру могут вылезти проблемы?
да, могут. оом вылезет и прибьет. work_mem это для узла в плане, а не общая на запрос
ну т.е. задавать его больше чем вообще памяти доступно не надо, а половину памяти (если на сервере больше ничего нет) нормально будет? не будет ООМ киллер приходить?
оно на каждое подключение и каждый узел плана - придет очень быстро
Во-первых, work_mem -- свой на каждое соединение, так если там сотня соединений -- то есть большая вероятность абзаца. Во-вторых -- дажэ суммарно если work_mem половина памяти -- то там четверть ещё памяти в shared_buffers, ещё гиг-другой-третий во всяких вспомогательных сервисах линукса -- в итоге на кэш ничего не остаётся. Точнее дажэ, на самом деле, что-то на кэш остаётся -- но всё активно вытесняется на диск, включая work_mem и shared_buffers. В общем, не то чтобы критично, но не очень полезно и скорость становится менее стабильной. В-третьих -- на самом деле разница между external disk merge и merge в памяти не такая большая. Поскольку в типичном случае в памяти остаётся ровно столько жэ (что могло -- осталось, что не могло -- нет), вопрос только в одном там копировании страницы между ядром, в общем, по сравнению с операцыями postgres над страницэй -- не очень много.
Обсуждают сегодня