Size: a a a

pgsql – PostgreSQL

2020 May 28

b

blkmrkt in pgsql – PostgreSQL
Петр Егоров
Будет падать только процесс, которому не хватило памяти. Это не будет вызывать падение всего кластера.
А не направите в какую сторону почитать или посмотреть сорцы как это устроено?
источник

ПЕ

Петр Егоров... in pgsql – PostgreSQL
Увы, мне тоже для этого пришлось бы смотреть исходники. Я не знаю в какое точно место смотреть
источник

ПЕ

Петр Егоров... in pgsql – PostgreSQL
За телефоном не удобно
источник

b

blkmrkt in pgsql – PostgreSQL
Ох ну спасибо, покопаюсь сам тогда. Обнадеживает что может быть такой простой фикс
источник

ПЕ

Петр Егоров... in pgsql – PostgreSQL
Петр Егоров
Будет падать только процесс, которому не хватило памяти. Это не будет вызывать падение всего кластера.
Это по опыту, происходить будет так
источник

b

blkmrkt in pgsql – PostgreSQL
Я как себе представляю - malloc не удается, дальше процесс сворачивает манатки, дропает валы и уходит на отдых, а постмастер или кто-то там еще запускают уборку.
источник

b

blkmrkt in pgsql – PostgreSQL
...и наверное именно потому оно работает, что sigkill нельзя обработать.
источник

VG

Viktor Grigorev in pgsql – PostgreSQL
Приветствую. Подскажите пожалуйста, postgres достаточно умный, чтобы не вызывать функции во время агрегации на полях, по которым идет агрегация? Или надо в подзапрос выносить и отдельно функцию считать?

select label, some_expensive_function(label) from t group by label
источник

EK

Evgeni Kontsevoy in pgsql – PostgreSQL
Коллеги подскажите плиз почему бьет ошибку в запросе:  ALTER TABLE ebol_all ALTER COLUMN service_provider_unp TYPE integer USING service_provider_unp::integer;   Ошибка : ERROR:  invalid input syntax for integer: "CA0238683"
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
blkmrkt
А постгрес умеет восстанавливаться от неудавшегося malloc? Я к тому что если работать с отключенным overcommit_memory - это как-то поможет сократить падения постмастера из-за одного оборзевшего процесса?
Читать релизнотесы (на самом деле не надо, надо доку: https://postgrespro.ru/docs/postgresql/11/kernel-resources ), ПГ не использует malloc, он использует mmap, начиная с 9.3.
У меня вообще серьёзные сомнения, что процесс при ошибке выделения памяти будет падать. Скорее всего, при недоступности нужного объёма ПГ будет работать по через диск и прочие временные файлы.
Хотя тут интересно было бы услышать разработчиков ПГ
источник

VG

Viktor Grigorev in pgsql – PostgreSQL
Viktor Grigorev
Приветствую. Подскажите пожалуйста, postgres достаточно умный, чтобы не вызывать функции во время агрегации на полях, по которым идет агрегация? Или надо в подзапрос выносить и отдельно функцию считать?

select label, some_expensive_function(label) from t group by label
explain как ни странно помог найти ответ
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Viktor Grigorev
explain как ни странно помог найти ответ
Только хотел посоветовать. :)
источник

VG

Viktor Grigorev in pgsql – PostgreSQL
nested loop при условии join-а id = any(values) всегда остается nested loop ?
думаю, попробовать gin index или unnest-ить values
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
blkmrkt
Доки вот тут говорят что "лучше отключить оверкоммит, но хз почему))0" https://www.postgresql.org/docs/12/kernel-resources.html
По-моему, там чётко написано, почему и зачем, разве нет?
источник

KK

Konstantin Knizhnik in pgsql – PostgreSQL
blkmrkt
Я как себе представляю - malloc не удается, дальше процесс сворачивает манатки, дропает валы и уходит на отдых, а постмастер или кто-то там еще запускают уборку.
Постгрес  использует malloc внутри бэкенда для "рабочей" памяти при обработке запроса.
Если malloc  возвращает NULL, то просто репортится ошибка:

src/backend/utils/mmgr/mcxt.c:
 if (unlikely(ret == NULL))
 {
   MemoryContextStats(TopMemoryContext);
   ereport(ERROR,
       (errcode(ERRCODE_OUT_OF_MEMORY),
        errmsg("out of memory"),
        errdetail("Failed on request of size %zu in memory context \"%s\".",
              size, context->name)));
 }


После чего абортируется текущая транзакция. И сам постгрес и даже  бэкенд продолдают работу.
Размер временной памяти задаётся work_mem параметром, но это не жётское ограничение но "пожелание" посгресу не выходить за эту границу.

Но недостаток памяти в системе может сказаться не только на malloc-е.
И для shared memory может не хватить физической памяти (особенно если выключен свап)
Тогда придёт страшный OOM killer и прибьёт первого попавшегося. Это с большой вероятностью приведёт к перезагрузке всего постгреса.

Справиться с этим на уровне посгреса никак нельзя. Можно пытаться ограничить аппетиты бэкендов и других процессов с помощью квот или  cgroups. Ну или иметь достаточный СВАП.
Ну а самое правильное - не запускать такие процессы которые выжрают всю память:)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Evgeni Kontsevoy
Коллеги подскажите плиз почему бьет ошибку в запросе:  ALTER TABLE ebol_all ALTER COLUMN service_provider_unp TYPE integer USING service_provider_unp::integer;   Ошибка : ERROR:  invalid input syntax for integer: "CA0238683"
потому что у вас там не-числовые данные
источник

EK

Evgeni Kontsevoy in pgsql – PostgreSQL
Victor Yegorov
потому что у вас там не-числовые данные
так вот именно,что только числовые.Коллега от страху поставил character varying вот сейчас хочу исправить но что то не получается
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Evgeni Kontsevoy
так вот именно,что только числовые.Коллега от страху поставил character varying вот сейчас хочу исправить но что то не получается
ну база же явно в ошибке говорит, что — нет
источник

EK

Evgeni Kontsevoy in pgsql – PostgreSQL
Victor Yegorov
ну база же явно в ошибке говорит, что — нет
так вот да и я себе уже не верю...пересматриваю уже 3 раз ..... понял,значит сейчас будут кардинальные действия....спасибо большое за ответ
источник

Е

Евгений in pgsql – PostgreSQL
Здравствуйте, как исключить эту проблему?
источник