
Alexey
17.08.2017
07:32:49

Darafei
17.08.2017
07:35:54
ну, это не киллер, это рипер :)
https://lwn.net/Articles/666024/
это тред ядра, который начинает разбирать память приложения, которое надо убить через -9, даже если оно повисло на неотменяемом сисколле

Google

Maksim
17.08.2017
07:41:15
@Komzpa получается, segfault невозможен при исчерпании процессом физической памяти и swap'а?

Darafei
17.08.2017
07:42:05
если это не так, то я хотел бы, чтобы мне показали этот путь исполнения :)
сегфолтов в постгресе и без oom хватает

Mike Chuguniy
17.08.2017
07:44:54
Опытным путем установлено, что если постгрес запущен по через pg_ctl без ключика -c (--core-files), то вы хоть заиграйтесь лимитами - корок нет и неизвестно. Странно, но я данный факт в wiki чегой-то не наблюдаю. Плохо смотрю?

Maksim
17.08.2017
07:54:59
Эта опция сама проставляет ulimit. Это можно проследить в коде: src/bin/pg_ctl/pg_ctl.c:810

Mike Chuguniy
17.08.2017
07:56:12
Причём тут выставление юлимитов?

Maksim
17.08.2017
07:58:05

Mike Chuguniy
17.08.2017
07:59:06
Ещё раз: без выставления этой опции ты можешь заиграться с юлимитами на уровне системы вусмерть. Но корку ты не получишь. Мало того! pg_ctl-ю на юлимит, выставленный в системе глубоко плевать, как показывает практика.
Проверяется данное утверждение просмотром соответствующего файлика в /proc.

Maksim
17.08.2017
08:00:25

Mike Chuguniy
17.08.2017
08:04:58

Dmitry
17.08.2017
08:06:01

Mike Chuguniy
17.08.2017
08:06:27
А что, на многих маках используется постгрес?

Google

Stas
17.08.2017
08:13:58
Причём тут выставление юлимитов?
при том что корку пишет ОС, и это управляется ulimit-ом. Да, плохо смотришь. Без '-c' они пишутся, если стоят правильные ulimit-ы
хотя, сейчас подумал, я почти из всех скриптов дергаю непосредственно постргес, а не pg_ctl. Он гипотетически может и перетирать ulimit-ы

Dmitry
17.08.2017
08:18:33

Mike Chuguniy
17.08.2017
08:18:59
Стас, без -c "Max core file size" равно нулю в /proc/$pid/limits, независимо от того, что написано в /etc/security/limits.conf
Я с этим хорошо так нахлебался, когда с Астрой развлекался.

Stas
17.08.2017
08:19:56
в сессии ставь ulimit

Dmitry
17.08.2017
08:19:57

Sergey
17.08.2017
08:24:48

Mike Chuguniy
17.08.2017
08:27:28
Т.е. либо по через инит-скрипты, либо по через системд, хвала его создателю?

Maksim
17.08.2017
08:28:57

Stas
17.08.2017
08:29:09

Dmitry
17.08.2017
08:29:21

Dmitry
17.08.2017
08:29:52

Dmitry
17.08.2017
08:31:02
Ну не все пользуются systemd. Кто-то принципиально сидит на последних версиях с init.d

Mike Chuguniy
17.08.2017
08:40:19
/etc/security/limits.conf ?
test@webdeb:~$ grep -v "^\($\|#\)" /etc/security/limits.conf
root soft core unlimited
root hard core unlimited
* soft core unlimited
* hard core unlimited
test@webdeb:~$ grep "^Max core file size" /proc/{345,708}/limits
/proc/345/limits:Max core file size 0 unlimited bytes
/proc/708/limits:Max core file size unlimited unlimited bytes
345 - это постмастер;
708 - это tail -f лога ПГ от имени системного пользователя - владельца ПГ.
После правки лимитс.конф сервачок перезапускался.

Mikhail
17.08.2017
08:41:19
Ребята, для primary key нужно выставлять unique constraint или это тавтология?

Mike Chuguniy
17.08.2017
08:42:05
Это тавтология.

Mikhail
17.08.2017
08:42:27
Ага, спасибо

Mike Chuguniy
17.08.2017
08:42:43
Ключ в таблице именно потому и называется ключом, что он однозначно определяет запись таблицы.

Google

Mikhail
17.08.2017
08:43:29
Ну я тоже так думал, просто в итернете часто в примерах выставляют unique для primary ключа в примерах

Mike Chuguniy
17.08.2017
08:43:31
Этих ключей может быть далеко не один. Но вот примари - он таки да, единственный и неповторимый. :)
Интернеты - оне такие, да...

Mikhail
17.08.2017
08:44:20

Mike Chuguniy
17.08.2017
08:44:35

Stas
17.08.2017
08:46:39

Артур
17.08.2017
08:50:57

Darafei
17.08.2017
08:51:29
а что из этого ты создавал?

Артур
17.08.2017
08:51:52
ничего. оно в списке маячит

Stas
17.08.2017
08:52:03

Артур
17.08.2017
08:52:19
после работы с EMS sql manager появилось

Artem
17.08.2017
08:54:46

Artem
17.08.2017
08:55:10
overcommit memory 2
overcommit ratio от 70 до 80

Nikolay
17.08.2017
08:56:44

Dmitry
17.08.2017
08:57:47

Artem
17.08.2017
08:58:55
Примерно 4к транзакций на одной ноде.
В пике до 7к

Dmitry
17.08.2017
09:01:05
А с памятью на слейвах так же, как на мастере?

Google

Artem
17.08.2017
09:03:26

Dmitry
17.08.2017
09:04:50
И тоже 82Гб используется, как на праймари?

Artem
17.08.2017
09:04:57
Настройки overcommit одинаковые
Но на слейвах ещё HugePages

Dmitry
17.08.2017
09:06:37
Ну тогда надо брать gdb и смотреть корки. Другого способа диагностики я не знаю...
А shared_buffers какой у вас?

Admin
ERROR: S client not available

Dmitry
17.08.2017
09:08:09
pgbouncer используете? Или другой пул коннектов?

Artem
17.08.2017
09:08:23

Dmitry
17.08.2017
09:11:19
Попробуйте на одном из слейвов поставить размер shared_buffers 75% от RAM

Игорь
17.08.2017
09:34:53

Mike Chuguniy
17.08.2017
09:41:52
Игорь, у меня аналогичная картина была и на системах с init-ом.
Ща погуглил - таки да, есть такая безобразия на системд. Штопаный разврат, нет в мире щастья, а в жЫзни совершенства.

Игорь
17.08.2017
09:48:34
с init давно не встерачался в этом плане

Alexander
17.08.2017
09:57:31
Ребята, извините за глупый вопрос, но как поставить pg_pathman? Его нужно клонировать и внутри папки выполнить make?

Айтуар
17.08.2017
09:58:24

Dmitry
17.08.2017
09:59:30

Alexander
17.08.2017
09:59:31

Google

Ildar
17.08.2017
09:59:40

Alexander
17.08.2017
10:00:01

Ildar
17.08.2017
10:00:40
(путь к pg_config нужен только, если его нет в PATH)

Artem
17.08.2017
10:01:18
Есть свиги?
У нас уже 8 вечера, решил оставить до завтра. В любом случае, огромное спасибо за советы, завтра утром будет продолжение эксперимента.

Nikolai
17.08.2017
10:21:30
Здравствуйте
Можете посоветовать решение для postgresql read write splitting?
чтобы запросы на запись шли на мастер, а на слейв только чтение

Alexey
17.08.2017
10:31:13
но это на single-node машине с выключенным swap. на NUMA машине и со свопом ответ на вопрос ещё менее однозначный
нет. это синхронная операция, выполняющаяся на page fault, когда не нашлось новых страниц
я утром несколько торопился и, признаюсь, не очень внятно формулировал мысли. моя мысль в том, что oom killer действует чаще асинхронно по отношении к pagefault-ам, происходящим в каждом конкретном процессе. например, если postgresql выделил больше памяти, чем доступно в системе, то с включенным overcommit с большой вероятностью он будет убит не при собственном pagefault-е, а в какой-то произвольный момент времени. просто потому, что какому-то другому процессу в системе понадобилась память

Dmitry
17.08.2017
10:37:19

Alexey
17.08.2017
10:40:33
что возможно с выключенным оверкоммитом, что и демонстрирует мой пример

Dmitry
17.08.2017
10:41:58

Alexey
17.08.2017
10:42:17
началось всё с обсуждения того, что segfault может быть вызван нехваткой памяти с дефолтным значением overcommit. и что приложения (включая postgres) редко обрабатывают этот конкретный случай всегда корректно

Dmitry
17.08.2017
10:42:17
другое дело, что во многих случаях это может не иметь смысла
нет памяти - нельзя ничего сделать, поэтому abort(), например