72 похожих чатов

Добрый день коллеги. Кто может подсказать по организации работы с

памятью в postgres.
Когда освобождается буфер work_mem и память возвращается в систему? По окончании запроса или по окончании сессии? И если есть ссылки на документацию или статью. Я к сожалению не нашел. В базе много idle соединений и интересует вопрос они держат work_mem или нет. Если нет то есть смысл считать исходя из количества активных сессий.

36 ответов

34 просмотра

Да никогда. СУБД не должна возвращать свою память кому-то

Aleksey-Lex-sey Автор вопроса
Aleksey-Lex-sey Автор вопроса
Ilya Zviagin
Да никогда. СУБД не должна возвращать свою память...

Тут не понятно что значит никогда. Сессия закрылась а буфер висит в памяти OS? По факту это утечка памяти.

Aleksey Lex-sey
По моему это касается shared_buffers?

Это должно касаться всей памяти, используемой СУБД. Я не знаю как конкретно в PG, но в идеале любая СУБД должна брать на старте всю отведенную ей память и никогда не отдавать обратно. Во первых, некому, во вторых, её потом придётся брать обратно, а это время...

Aleksey Lex-sey
Тут не понятно что значит никогда. Сессия закрылас...

Ещё раз, я не знаю точно как конкретно в PG с этой конкретной памятью, но в идеале должно быть так.

Обычно такая память , используемая клиентами, состоит из двух или больше частей, одна часть составляет структуры обслуживания самого соединения, она остаётся, остальная память обычно пере используется всеми клиентами СУБД, и не принадлежит конкретной сессии.

Aleksey-Lex-sey Автор вопроса
Ilya Zviagin
Это должно касаться всей памяти, используемой СУБД...

Есть 2 "типа памяти" shared_buffers (аналог в ORACLE SGA) она резервируется на всё время работы процесса СУБД. Есть динамическая work_mem (аналог в ORACLE - PGA) - она выделяется динамически на каждую сессию. Причем work_mem может использоваться многократно в зависимости от операций (соединения, сортировки). Если бы она не возвращалась - логичнее было бы так же как и shared_buffers резервировать при старте и на все время работы. Хотелось бы услышать комментарий кто точно знает как это работает или может прочитать в исходниках.

Aleksey-Lex-sey Автор вопроса
Ilya Zviagin
Обычно такая память , используемая клиентами, сост...

Каждое соединение это форк от основного процесса. При закрытии сессии процесс завершается. Что происходит с памятью? Если она передается другому процессу то в каком объеме? = work_mem или n*work_mem если он использоваться многократно например при нескольких операциях соединения.

Aleksey Lex-sey
Есть 2 "типа памяти" shared_buffers (аналог в ORAC...

Спроси в PG чате, там грамотно скажут.

Aleksey-Lex-sey Автор вопроса
Ilya Zviagin
Спроси в PG чате, там грамотно скажут.

Попробую и там. Спасибо. Если здесь есть кто знает - буду благодарен за ответ.

Aleksey Lex-sey
Есть 2 "типа памяти" shared_buffers (аналог в ORAC...

Но я бы хотел услышать зачем это тебе, принципиально

Ilya Zviagin
Да никогда. СУБД не должна возвращать свою память...

Да всегда. С чего это она не должна?! > Я не знаю как конкретно в PG, Возвращается. > но в идеале любая СУБД должна брать на старте всю отведенную ей память и никогда не отдавать обратно Почему это "идеал"? Вот, например, что делает другая СУБД (цитирую https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/server-memory-server-configuration-options?view=sql-server-ver15 ): "When SQL Server is using memory dynamically, it queries the system periodically to determine the amount of free memory. Maintaining this free memory prevents the operating system (OS) from paging. If less memory is free, SQL Server releases memory to the OS. " Т.е. тоже возвращает. > Во первых, некому Как это "некому" (всегда есть OS (и другие программы))?!

Aleksey Lex-sey
Есть 2 "типа памяти" shared_buffers (аналог в ORAC...

> Хотелось бы услышать комментарий кто точно знает как это работает Возвращается, естественно. Используется система memory contexts (это вид region based memory management, если что). > или может прочитать в исходниках Описание: https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/mmgr/README Реализация: https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/mmgr/aset.c

Aleksey-Lex-sey Автор вопроса
Yaroslav Schekin
Да всегда. С чего это она не должна?! > Я не знаю...

@lex_sey , вот Ярослав у нас большой спец по PG !

Yaroslav Schekin
Да всегда. С чего это она не должна?! > Я не знаю...

Потому что ОС и СУБД - антагонисты, должна работать либо ОС, либо СУБД, в идеале, в худшем случае СУБД под ОС (это к сожалению самый распространённой случай). Но ни в коем случае никаких больше "приложений"...

Ilya Zviagin
Потому что ОС и СУБД - антагонисты, должна работат...

> Потому что ОС и СУБД - антагонисты, должна работать либо ОС, либо СУБД Ну уж нет. Вы видели, что считают разработчики по крайней мере двух "крупных" СУБД по поводу выделения памяти? Как Вы объясните этот факт? > в идеале, в худшем случае СУБД под ОС (это к сожалению самый распространённой случай). Сейчас этой дурью уже почти никто не мается, нет? ;) > Но ни в коем случае никаких больше "приложений"... А на практике чаще всего бывает иначе (к сожалению, да). ;)

Ilya Zviagin
Да мне то что до того что они там думают?

А им что до того, что думают те, кто СУБД не разрабатывает, извините? ;) Сейчас уже никто не делает СУБД, которые работают "прямо на железе", нет? Т.е. аргументы какие-то есть в пользу этого утверждения?

Ilya Zviagin
Да, почти не делают...

Неужели кто-то до сих про делает RDBMS прямо на "железе" (просто любопытно)?!

Aleksey-Lex-sey Автор вопроса
Yaroslav Schekin
Неужели кто-то до сих про делает RDBMS прямо на "ж...

У нас основная часть в облаке но самая нагруженная база на baremetal.

Ilya Zviagin
Ну ИБМ же. Но оно уж разваливается...

Разве IBM не использует Z/OS (или как оно там называется) повсеместно на своих mainframes (т.е. железа там и близко от СУБД нет, всегда есть слои трансляции)?

Aleksey Lex-sey
У нас основная часть в облаке но самая нагруженная...

Не-не, речь совсем не об этом, а о том, что какая-то СУБД работает вообще без операционной системы.

Yaroslav Schekin
Неужели кто-то до сих про делает RDBMS прямо на "ж...

IBM, разумеется. iSeries (как оно сейчас там называется, потомок AS/400) -- до сих пор делают.

Yaroslav Schekin
Разве IBM не использует Z/OS (или как оно там назы...

Z/OS -- действительно не реляцыонная система, но iSeries -- это и не мэйнфреймы.

Yaroslav Schekin
Разве IBM не использует Z/OS (или как оно там назы...

Кстати, под мэйнфрэймы z/os -- вроде тожэ не единственный вариант, там помнится как минимум их DTM мог на голом жэлезе вроде работать (а мог и на партицыи, понятно), была ещё куча каких-то старых наследников разного уровня мониторов -- но там вроде реляцыонных на жэлезе действительно не припомню.

Ilya Anfimov
IBM, разумеется. iSeries (как оно сейчас там назыв...

А это именно RDBMS? Ну и ссылка есть (а то в этих так любимых IBM разных продуктах с почти одинаковыми названиями пойди разберись)?

Ilya Anfimov
Кстати, под мэйнфрэймы z/os -- вроде тожэ не единс...

Ну "раньше" много чего было, вопрос о современных.

Yaroslav Schekin
А это именно RDBMS? Ну и ссылка есть (а то в этих ...

SLIC IBM i during initial program load of the SLIC The SLIC consists of the code which implements the TIMI on top of the IBM Power architecture. In addition to containing most of the functionality typically associated with an operating system kernel, it is responsible for translating TIMI instructions into machine code, and it also implements some high level functionality which is exposed through the TIMI, such as IBM i's integrated relational database.[1] from https://en.wikipedia.org/wiki/IBM_i Ну да, есть нюанс, что в общем существует некоторый low-level уровень ("объекты" в памяти, "файлы"), который в общем доступен через SQL -- но с ограничениями. Например, файлы могут не журналироваться, а при доступе через SQL -- изменения в них обязательно пишутся в журнал, для транзакцыонности. Но система реально выстроена вокруг базы данных, и сейчас это ужэ большэ реляцыонная база данных, чем нет.

Ilya Anfimov
SLIC IBM i during initial program load of the SLI...

Да... продукты IBM — это какая-то альтернативная реальность, честное слово. ;) > Но система реально выстроена вокруг базы данных По документации больше похоже на то, что это такой "сплав" OS и СУБД. Спасибо!

Yaroslav Schekin
Неужели кто-то до сих про делает RDBMS прямо на "ж...

я там порыскал про Терадата, но инфо почти нет, тоже.

Ilya Zviagin
я там порыскал про Терадата, но инфо почти нет, то...

Ну так вот до сих про есть, оказывается: https://t.me/dba_ru/146501

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта