|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
В теории память отжираемаемая постгресом складывается из shared_buffers и количество_коннектов * work_mem. Поправьте если ошибаюсь.. Так вот при ворк мем = 8Мб, шаред буферс = 256Мб и колличестве коннектов около 200, каким образом постгес умудряется отожрать 12 Гб оперативки? о_О виндоус ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 18:11 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
в теории ведь около двух Гб отъести должен только. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 18:11 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамять, И в 255 раз отвечаем на этот вопрос. Вы неверно смотрите на потребляемую память. Большинство тулзов покажет shared как кусок КАЖДОГО из процессов postgres так что в теории вы можете увидеть таким образом до 200*256MB + 200 * 8Mb = до 51Gb. А занята будет пара гигабайт. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 18:18 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
Maxim Bogukппамять, И в 255 раз отвечаем на этот вопрос. Вы неверно смотрите на потребляемую память. Большинство тулзов покажет shared как кусок КАЖДОГО из процессов postgres так что в теории вы можете увидеть таким образом до 200*256MB + 200 * 8Mb = до 51Gb. А занята будет пара гигабайт. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru Ну смотрите, даже в Task Manager процессы постгрес в Memory (Private Working Set) (да и в других тоже) показывает разное количество памяти, почти от 0 до 12 Мб, все разные. А в Peak Working Set (Memory) даже до 1 Гб. я не понимаю, ведь одинковое количество памяти у всех процессов дожно быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 18:29 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
Maxim Bogukппамять, И в 255 раз отвечаем на этот вопрос. Вы неверно смотрите на потребляемую память. Большинство тулзов покажет shared как кусок КАЖДОГО из процессов postgres так что в теории вы можете увидеть таким образом до 200*256MB + 200 * 8Mb = до 51Gb. А занята будет пара гигабайт. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru А, т.е. в памяти может показать от 8Мб до 256+8Мб. Но показывает ведь меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 18:30 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
может быть есть статья какая-нибудь про память на винде? Я ничего толкового не нашел - все по линуксу. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 18:31 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамять, `work_mem` он не для соединения, а для узла в плане запроса . Если у вас развесистые запросы, то каждый из них может кушать по несколько `work_mem`. Также имеется другая часть приватной памяти, в которой сидит кэш системного каталога, разобранные запросы и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 19:29 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
vyegorovппамять, `work_mem` он не для соединения, а для узла в плане запроса . Если у вас развесистые запросы, то каждый из них может кушать по несколько `work_mem`. Также имеется другая часть приватной памяти, в которой сидит кэш системного каталога, разобранные запросы и т.д. Т.е. один коннект может употребить два и более work_mem из оперативной памяти? (не с диска) Про другую часть приватной памяти -это шаред буфер вы имеете ввиду? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 10:33 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамятьТ.е. один коннект может употребить два и более work_mem из оперативной памяти? (не с диска) да, именно так — может. ппамятьПро другую часть приватной памяти -это шаред буфер вы имеете ввиду? нет, имею в виду приватную оперативную память сессии, в которой хранятся кэш запросов, системного каталога и ещё куча всего. там же и `work_mem` выделяется. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 12:30 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамятьТ.е. один коннект может употребить два и более work_mem из оперативной памяти? (не с диска) Да в некоторых случаях может. Но коннект потребляет память по необходимости. Т.е. если вы work_mem поставите в 1Gb это совсем не значит что каждый коннект сразу после установления будет требовать 1Gb (т.е. память только по делу употребляется но потом уже не возвращается поэтому не стоит делать долгоживущие коннекты с большим work_mem). Именно потребление памяти по необходимости дает тот эффект что вы описали авторпоказывает разное количество памяти, почти от 0 до 12 Мб, все разные. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 13:56 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
Maxim Boguk, vyegorov буду очень благодарен, если скажите где написано что work_mem может потреблять больше операитвной памяти (не с диска) если ему не хватает. Я всегда думал что при нехватке просто темповые файлы создаются чтобы обеспечить выполнение запроса. Просто тут с памятью серьезные траблы и непонятки Версия сервера 9.4 винда. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 14:05 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамятьMaxim Boguk, vyegorov буду очень благодарен, если скажите где написано что work_mem может потреблять больше операитвной памяти (не с диска) если ему не хватает. Я всегда думал что при нехватке просто темповые файлы создаются чтобы обеспечить выполнение запроса. Просто тут с памятью серьезные траблы и непонятки Версия сервера 9.4 винда. Я очень давно не видел проблем на нормальном оборудование с памятью для PG в нормальных условиях (нормальные - выделенный сервер исключительно под базу с 64+Gb и не тысячи коннектов и разумная настройка). Идем прямо в доку https://www.postgresql.org/docs/9.4/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY и читаем: work_mem (integer) Specifies the amount of memory to be used by internal sort operations and hash tables before writing to temporary disk files. The value defaults to four megabytes (4MB). Note that for a complex query, several sort or hash operations might be running in parallel; each operation will be allowed to use as much memory as this value specifies before it starts to write data into temporary files. (но это "использование более чем work_mem памяти" если не OLAP типа задачи - случай весьма редкий). PS: не используйте винду в связке с PG на Production это до добра не доводит. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 14:10 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамятьMaxim Boguk, vyegorov буду очень благодарен, если скажите где написано что work_mem может потреблять больше операитвной памяти (не с диска) если ему не хватает. Я всегда думал что при нехватке просто темповые файлы создаются чтобы обеспечить выполнение запроса. Просто тут с памятью серьезные траблы и непонятки Версия сервера 9.4 винда. work_mem не потребляется больше чем определено в конфигах, -- а может выделяться на каждый узел плана если это потребуется. Условно запросу потребовалось сделать 5 сортировок , будет выделено 5 отдельных сегментов памяти равных work_mem. Но если данные для пятой сортировки не влезли в сегмент, то будет создан темповый файл на диске. То есть нельзя создавать сегмент памяти больше чем work_mem, но можно создать несколько сегментов равных work_mem))) But work_mem RAM can be allocated for each node of a query on each connection, all at the same time. -- отсюда https://wiki.postgresql.org/wiki/Number_Of_Database_Connections ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 14:19 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамятьЯ всегда думал что при нехватке просто темповые файлы создаются чтобы обеспечить выполнение запроса. work_mem — это параметр планировщика . т.е. вы говорите: когда запрос будет работать, смело можно потреблять X мегабайт по необходимости. и если выбранный узел “влезает” в этот лимит, то будет использован алгоритм работы с памятью, если не влезает — планировщик выберет что-то другое, с временными файлами или менее прожорливое до памяти. это всё ещё до передачи запроса executor-у. если сделать `work_mem` большим, то база будет “брать” свои законные мегабайты. неаккуратная настройка может увести систему в своп. проще всего подобные проблемы смотреть в мониторинге — за CPU, RAM, SWAP и IO надо следить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 15:00 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
Maxim BogukппамятьMaxim Boguk, vyegorov буду очень благодарен, если скажите где написано что work_mem может потреблять больше операитвной памяти (не с диска) если ему не хватает. Я всегда думал что при нехватке просто темповые файлы создаются чтобы обеспечить выполнение запроса. Просто тут с памятью серьезные траблы и непонятки Версия сервера 9.4 винда. Я очень давно не видел проблем на нормальном оборудование с памятью для PG в нормальных условиях (нормальные - выделенный сервер исключительно под базу с 64+Gb и не тысячи коннектов и разумная настройка). Идем прямо в доку https://www.postgresql.org/docs/9.4/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY и читаем: work_mem (integer) Specifies the amount of memory to be used by internal sort operations and hash tables before writing to temporary disk files. The value defaults to four megabytes (4MB). Note that for a complex query, several sort or hash operations might be running in parallel; each operation will be allowed to use as much memory as this value specifies before it starts to write data into temporary files. (но это "использование более чем work_mem памяти" если не OLAP типа задачи - случай весьма редкий). PS: не используйте винду в связке с PG на Production это до добра не доводит. Так во временные файлы ведь пишется, а не оперативную память. На счет винды, я бы рад, сильно много вкусняшек на линуксе для пг, но политика компании. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 15:18 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
daevyппамятьMaxim Boguk, vyegorov буду очень благодарен, если скажите где написано что work_mem может потреблять больше операитвной памяти (не с диска) если ему не хватает. Я всегда думал что при нехватке просто темповые файлы создаются чтобы обеспечить выполнение запроса. Просто тут с памятью серьезные траблы и непонятки Версия сервера 9.4 винда. work_mem не потребляется больше чем определено в конфигах, -- а может выделяться на каждый узел плана если это потребуется. Условно запросу потребовалось сделать 5 сортировок , будет выделено 5 отдельных сегментов памяти равных work_mem. Но если данные для пятой сортировки не влезли в сегмент, то будет создан темповый файл на диске. То есть нельзя создавать сегмент памяти больше чем work_mem, но можно создать несколько сегментов равных work_mem))) But work_mem RAM can be allocated for each node of a query on each connection, all at the same time. -- отсюда https://wiki.postgresql.org/wiki/Number_Of_Database_Connections Ого, круто! Получается создасться еще один или несколько коннектов, которые в pg_stat_activity отдельными строками будут? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 15:19 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
vyegorovппамятьЯ всегда думал что при нехватке просто темповые файлы создаются чтобы обеспечить выполнение запроса. work_mem — это параметр планировщика . т.е. вы говорите: когда запрос будет работать, смело можно потреблять X мегабайт по необходимости. и если выбранный узел “влезает” в этот лимит, то будет использован алгоритм работы с памятью, если не влезает — планировщик выберет что-то другое, с временными файлами или менее прожорливое до памяти. это всё ещё до передачи запроса executor-у. если сделать `work_mem` большим, то база будет “брать” свои законные мегабайты. неаккуратная настройка может увести систему в своп. проще всего подобные проблемы смотреть в мониторинге — за CPU, RAM, SWAP и IO надо следить. Получается что планы могут "поехать" при изменении work_mem, даже если не менять effective_cache_size ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 15:21 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамятьПолучается что планы могут "поехать" при изменении work_mem, даже если не менять effective_cache_size ? да. effective_cache_size имеет очень незначительное влияние на план, в отличии от `work_mem`. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 15:51 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамятьПолучается создасться еще один или несколько коннектов, которые в pg_stat_activity отдельными строками будут? Почему? если сложный запрос, в нём будет много узлов, каждый из которых может выделить себе до `work_mem` памяти (верхний предел). новые подключения не открываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 15:53 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
vyegorovппамятьПолучается создасться еще один или несколько коннектов, которые в pg_stat_activity отдельными строками будут? Почему? если сложный запрос, в нём будет много узлов, каждый из которых может выделить себе до `work_mem` памяти (верхний предел). новые подключения не открываются. Понял, спасибо. А максимальное распарралеливание ведь настравивается где-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 15:58 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамятьА максимальное распарралеливание ведь настравивается где-то? Речь не про параллельное исполнение запросов, не путайте. Мы сейчас говорим об исполнении одного запроса одним серверным процессом. Максимальное кол-во узлов, которым нужна будет память, зависит только от сложности запросов. Рекомендуется поднять `work_mem` выше умолчательных 4МБ, но “консервативно”, в зависимости от сервера и других настроек (в частности `max_connections`). Можно увеличивать: - для отдельных запросов, через команду `SET` непосредственно перед запросом (тут осторожно с pgbouncer-ом надо быть) - для отдельных пользователей/функций/баз через `ALTER ROLE/FUNCTION/DATABASE SET` - для всего кластера, когда существует достаточное кол-во свободной памяти в системе — надо присматривать за базой после таких изменений ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 18:39 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
ппамятьvyegorovпропущено... Почему? если сложный запрос, в нём будет много узлов, каждый из которых может выделить себе до `work_mem` памяти (верхний предел). новые подключения не открываются. Понял, спасибо. А максимальное распарралеливание ведь настравивается где-то? Вы бы объяснили в чем у вас проблема то??? Скорее всего выяснится что она не там где вы думаете. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 19:31 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
Maxim Bogukппамятьпропущено... Понял, спасибо. А максимальное распарралеливание ведь настравивается где-то? Вы бы объяснили в чем у вас проблема то??? Скорее всего выяснится что она не там где вы думаете. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru Проблема в том, что доступная память на сервере меееедленно выедается. И потом приходится перезапускать постгре, иначе сервер совсем не шевелится ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2017, 11:29 |
|
Не пойму, как постгрес может столько жрать (памяти)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2017, 11:34 |
|
|
start [/forum/topic.php?fid=53&msg=39511532&tid=1996261]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 300ms |
total: | 454ms |
0 / 0 |