
Dmitry
17.08.2017
10:43:32
так делать нельзя, в общем случае

Alexey
17.08.2017
10:43:44
а так делают. и postgres, я уверен, тоже
много лет назад я написал отладочный код в mysql, позволяющий такие случаи отлавливать и покрывать тесткейсами

Dmitry
17.08.2017
11:02:45
а так делают. и postgres, я уверен, тоже
Это не совсем так. Есть память, выделяемая напрямую при помощи malloc, но таких мест мало. Для всего остального используется обвязка palloc, которая умеет вот так:
if (ret == NULL)
{
MemoryContextStats(TopMemoryContext);
ereport(ERROR,
(errcode(ERRCODE_OUT_OF_MEMORY),
errmsg("out of memory"),
errdetail("Failed on request of size %zu.", size)));
}

Google

Alexey
17.08.2017
11:06:24
Похожая обвязка есть и в mysql. Тем не менее, баги такого типа всплывают до сих пор

Stas
17.08.2017
11:34:11

Alexey
17.08.2017
11:39:42
Так выше обсудили
Вопрос, на который я отвечал: "Maksim Milyutin:
@Komzpa получается, segfault невозможен при исчерпании процессом физической памяти и swap'а?"

Stas
17.08.2017
11:41:38
про баги ок, но утверждение "segfault невозможен при исчерпании процессом физической памяти и swap'а" это не опровергает, так?

Maksim
17.08.2017
11:42:02
@alexey_kopytov ваш случай демонстрирует ошибку разраба, я же всё-таки имел в виду segfault независимо от него

Alexey
17.08.2017
11:42:14
Так ведь возможен?
Ну значит я неправильно понял вопрос

Maksim
17.08.2017
11:43:32
В коде pg проверки как правило стоят после malloc

Alexey
17.08.2017
11:44:07
в коде mysql тоже. "как правило" — ключевые слова

Che
17.08.2017
13:36:48
Создавал кластер в /var/, теперь стало мало места. Есть место в хомяке. Я могу как-то перенести старые базы из /var?

عاصم بن حارث
17.08.2017
13:43:16

Che
17.08.2017
13:43:27

Google

عاصم بن حارث
17.08.2017
13:43:34
?

Nikolay
17.08.2017
14:47:26

Nikolai
17.08.2017
14:47:58

Mike Chuguniy
17.08.2017
15:36:17
systemd не учитывает limits.conf. Надо в юнит ставить
Спасибо тебе, друХ!
test@webdeb:~$ grep "^Max core file size" /proc/1927/limits
Max core file size unlimited unlimited bytes
test@webdeb:~$ grep LimitCORE /etc/systemd/system.conf
DefaultLimitCORE=infinity
test@webdeb:~$
Только не надо в юниты лезть, надо документацию читать. man systemd-system.conf однако!
ЗЫ. А те, кто сидит на init-скриптах - страдайте, ага.

ildus
17.08.2017
15:54:24

Dmitry
17.08.2017
16:20:20

Nikolay
17.08.2017
16:21:01

Dmitry
17.08.2017
16:22:58

Darafei
17.08.2017
16:23:39

Mike Chuguniy
17.08.2017
16:23:59
Его же ещё обслуживать необходимо. Ну и всё такое прочее...

Nick
17.08.2017
17:41:37

Nikolai
17.08.2017
17:42:52

Nick
17.08.2017
17:42:58
ну да

Nikolai
17.08.2017
18:08:20
ну да
Спасибо, буду читать

Konstantin
17.08.2017
18:13:02
Посоветуйте плиз что-то под мультимастер или как лучше HA с автофайловером, фэйлбэком? Аля Galera что ли? Пришёл из мира mysql и что-то не разберусь

Nick
17.08.2017
18:13:28
pgpool? ?

Konstantin
17.08.2017
18:14:00
Pgpool же вроде не про это?
2й во всяком случае, если это разное

Nick
17.08.2017
18:14:30
ну формально и про это тоже - только я никогда именно для этого его не использовал - да и вообще я не уверен, как он себя под очень серьезной нагрузкой будет вести

Google

Konstantin
17.08.2017
18:15:30
Я попробовал готовое решение с pgpool2+repmgr, но первый же тест провалился, фэйлбэк не проходит

Nick
17.08.2017
18:15:33
мультимастер... была какая-то шняга - мы ее тестили - но это тихий ужас - еще хуже галеры ?
ну вот когда провалится 10й тест после обработки напильником - тогда и можно будет что-то говорить )

Konstantin
17.08.2017
18:16:29
С синхронной репликацией не всё тау просто?

Nick
17.08.2017
18:17:55
ну мы про мультимастер.. синхронная репликация в режиме одного мастера и слейвов работает чудесно

Konstantin
17.08.2017
18:19:39
Но как и в случае с галерой - потеря на записи, я не найду цифры, она существенная? И чем вообще это организовывать

Nick
17.08.2017
18:20:08
у нас было -35% по скорости ?
на 3х нодах
какой-то из стандартных тестов..tpc-чтото

Konstantin
17.08.2017
18:20:32
Смотрю сейчас Stolon как готовое решение, из минусов пока только - не умеет балансировку

Nick
17.08.2017
18:21:27
ок.. с тебя success story ?

Konstantin
17.08.2017
18:23:03
Такой себе с меня рассказчик, я думаю в 2017 есть кому такое рассказывать))

Mike Chuguniy
17.08.2017
18:26:54

Konstantin
17.08.2017
18:27:19

Fike
17.08.2017
18:27:43
нету мультимастера в классических sql. и не завезут.

Konstantin
17.08.2017
18:28:35
В мускле же есть

Mike Chuguniy
17.08.2017
18:29:37
Вот, посмотрите, что предлагает коллективный разум:
https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling

Konstantin
17.08.2017
18:31:19
да, я видел это и по каждому отдельно читал. Но читать одно =\

Mike Chuguniy
17.08.2017
18:34:32
Покрутите пару-другую дней назад по чатЕГу, там Игорь Успенский говорил об одной из связок.
Лично я делал в своё время на heartbeat-е (во времена 5-го Деба и 4-й ЦентОСи), видел на corosync+pacemaker.

Konstantin
17.08.2017
18:44:39

Google

Konstantin
17.08.2017
18:45:55
https://github.com/zalando/patroni
https://github.com/sorintlab/stolon
вот сейчас буду тестить, хз что выйдет

Vadim
17.08.2017
18:52:51
В мускуле? мультимастер? Откуда он там?)

Fike
17.08.2017
18:52:58
двухфазный коммит не работает в распределенной системе
это обман, чтобы набрать классы

Vadim
17.08.2017
18:53:54
мультимастер не возможен без арбитра/координатора

Fike
17.08.2017
18:54:17
паксос позволяет

Vadim
17.08.2017
18:58:20
Это вы про гугл что ли с их Big Table?)

Yura
17.08.2017
19:01:22
В F1/Spaner paxos для репликации шарда и 2pc для меж-шардовых транзакций, если мне память не изменяет.

Konstantin
17.08.2017
19:01:23

Admin
ERROR: S client not available

Vadim
17.08.2017
19:06:54
CRDT (conflict-free replicated data type)?

Yura
17.08.2017
19:24:14
Расширенный трех-фазный коммит может комитить кворумом.
Очень похожий алгоритм - paxos commit от Лампорта.

Vadim
17.08.2017
19:25:46
а что в этом случае будет с перфомансом?

Yura
17.08.2017
19:26:12
Мы выясняем вопрос, нужен ли арбитр.
Ответ: ноды сами могут собираться в "мини кластер" и принимать решение кворумом.

Vadim
17.08.2017
19:28:33
аля etcd, consul, zookeeper?

Fike
17.08.2017
19:29:38
etcd и consul не принимают решение кворумом

Vadim
17.08.2017
19:30:01
принимает решение лидер. Но кворум должен быть

Google

Yura
17.08.2017
19:30:16
У этих товарище одинаковая архитектура: кворумная репликация от мастера к репликам одних и тех же данных алгоритмом семейства paxos (raft, zab - в принципе изоморфны друг другу)
Двух фазный, трех фазный коммиты - это про изменение несколькими мастерами разных (в общем случае, но может и одних и тех же) данных

Vadim
17.08.2017
19:32:22
Это вы проводите исследование в pgpro мультимастере?

Yura
17.08.2017
19:33:01
Нет. Его пишут другие ребята (по умнее меня). Я просто болтаю с ними, и почитываю литературу.

Vadim
17.08.2017
19:34:23
ок, спасибо за инфу)

Artem
18.08.2017
00:48:50
В общем, лучшее - враг хорошего.
Мастер падал вместе со слейвами на одном определенном запросе.
Причина была в новом параметре 9.6 max-paralles-workers-per-gather
У нас был выставлен в 16
При общем количестве ядер 24
Отключив данный параметр, все стало прекрасно.
Теперь вопрос, у кого и как используется данный параметр параллелизма?


Yuriy
18.08.2017
01:18:21
15.1. Как работают параллельно выполняемые запросы
https://postgrespro.ru/docs/postgresql/9.6/how-parallel-query-works.html
Используя EXPLAIN, вы можете узнать количество исполнителей, выбранное планировщиком для данного запроса. Когда при выполнении запроса достигается узел Gather, процесс, обслуживающий сеанс пользователя, запрашивает фоновые рабочие процессы в этом количестве. Общее число фоновых рабочих процессов, которые могут существовать одновременно, ограничивается параметром max_worker_processes, так что вполне возможно, что параллельный запрос будет выполняться меньшим числом рабочих процессов, чем планировалось, либо вообще без дополнительных рабочих процессов. Оптимальность плана может зависеть от числа доступных рабочих процессов, так что их нехватка может повлечь значительное снижение производительности. Если это наблюдается часто, имеет смысл увеличить max_worker_processes, чтобы одновременно могло работать больше процессов, либо уменьшить max_parallel_workers_per_gather, чтобы планировщик ожидал их наличия в меньшем количестве.
RTFM в общем.


Artem
18.08.2017
01:23:37
RTFM в общем.
Т.е. Вы хотите сказать, что max-worker-processes 10 при max-parallel-workers-per-gather 16 это моветон?

Yuriy
18.08.2017
01:25:11
Всё зависит от криворукости того кто проектировал схему: какие у вас запросы выполняются и какие применяются блокировки - используйте explain что бы понять почему у вас происходит ожидание освобождения рабочих потоков для КОНКРЕТНОГО запроса.
Я не думаю что мне стоит объяснять как читать документацию и следовать её указаниям.
В целом число worker'ов не обязательно должно равняться количеству ядер умноженному на два - это работает только в случае с thread pool'aми и прочими примитивами в общепринятых многопоточных решениях.
В PostgreSQL'e блокировки происходят довольно часто, по разным причинам, по этому при определении оптимального числа Worker'ов нужно брать во внимание особенности работы существующих паралельных запросов.

Darafei
18.08.2017
02:50:37

Artem
18.08.2017
02:58:50
При значении max- parallel-workers-per-gather 4, полет нормальный, уже в течение часа.

Darafei
18.08.2017
03:02:37
оно не должно крешиться при любых сочетаниях этих параметров