@pgsql

Страница 987 из 1062
Andrew
16.09.2018
15:06:17
event sourcing
Благодарю!

Fike
16.09.2018
15:08:41
Благодарю!
Там скорее всего полприложения придется переписывать, поэтому не подойдет. Но вообще самый каноничный метод, в будущем сможете применить.

Terminator
16.09.2018
15:40:07
@GrandAleks будет жить. Поприветствуем!

Slava
16.09.2018
15:57:54
Google
╰─═ঊঈGooDeeJaYঊঈ═─╯
16.09.2018
16:41:12
что интересует?
Нужна хорошая инфа о пулах и транзакциях, в доке прочитал чуть не понял

Slava
16.09.2018
17:23:09
Нужна хорошая инфа о пулах и транзакциях, в доке прочитал чуть не понял
пулов не нашел, сделал свой. транзакции - https://magicstack.github.io/asyncpg/current/api/index.html#transactions, либо with контекст, либо объект транзакции. хотя дока по пулам есть - https://magicstack.github.io/asyncpg/current/api/index.html#connection-pools

Timur
17.09.2018
05:33:47
добрый день. Подскажите, чем можно относительно быстро мигрировать БД размером где-то в 300 гигабайт с сервера на сервер? Перетаскивать дамп или сами файлы займёт в районе часа (а дамп восстанавливать - ещё дольше), а останавливать БД не хотелось бы. Хотелось бы поднять master-slave репликацию без остановки экземпляра самой БД

пинки в документацию приветствуются, конечно

официальная документация рекомендует либо pg_dump, либо перетаскивать файлы, эхма

т.е. вопрос даже не в быстроте, а в том, чтобы не останавливать мастер на время осуществления копирования

Mikhail
17.09.2018
05:40:01
pg_basebackup

Timur
17.09.2018
05:41:04
pg_basebackup
т.е. он сделает консистентный снапшот без остановки, и для старта слейва мне достаточно будет иметь WAL начиная с момента старта pg_basebackup?

Mikhail
17.09.2018
05:41:23
Вас в гугле забанили?

Timur
17.09.2018
05:43:03
чат на английском языке: ты задаёшь вопрос, тебе отвечают. Чат на русском языке: ты задаёшь вопрос, а потом тебе долго рассказывают, какой ты мудак :)

тем не менее, большое спасибо

Google
Terminator
17.09.2018
06:03:57
@InessaHr будет жить. Поприветствуем!

Aleksandr
17.09.2018
06:05:58
единственное нужно будет перезагрузить мастер что бы добавить в pg_hba.conf новую запись для разрешения удаленного подключения к пользователю у которого права репликации

возможно и не нужно перезагружать а есть какой то способ релоада , но повторюсь, с ПГ начал только знакомство ?

Timur
17.09.2018
06:16:20
спасибо большое :)

у меня однократная по сути задача, полноценную репликацию уже потом поднимать буду

надеюсь не придётся задавать тупых вопросов

Timur
17.09.2018
06:21:39
Какие версии PostgreSQL источника и приёмника?
с 10.4 на 10.5 (впрочем, если не взлетит, то поставлю 10.4 из репозитория, это не проблема)

Alexander
17.09.2018
06:23:34
А OS какие?

Mike Chuguniy
17.09.2018
06:31:31
т.е. он сделает консистентный снапшот без остановки, и для старта слейва мне достаточно будет иметь WAL начиная с момента старта pg_basebackup?
Изучить документацию на предмет archive_command&restore_command, чтобы не болела голова о наличии нужных WAL-ов.

Aleksandr
17.09.2018
06:39:30
Mike Chuguniy
17.09.2018
06:41:16
официальная документация рекомендует либо pg_dump, либо перетаскивать файлы, эхма
Для создания ФИЗИЧЕСКОЙ реплики pg_dump? о_О Вы что курите?! И не надо читать чего-то из интернетов, советы в таких статьях всегда либо неполные, либое содержат неточности (archive_command&restore_command, ага), тем более, что по постгресу, благодаря Постгресу профессиональному, есть документация на русском языке: https://postgrespro.ru/docs/postgresql/10/high-availability

понял, спасибо ? говорю ж что только начинаю изучать ПГ ?
Не стоит в таком случае приводить статьи сомнительного качества из этих самых иинтернетов.

Aleksandr
17.09.2018
06:42:28
Не стоит в таком случае приводить статьи сомнительного качества из этих самых иинтернетов.
в статье не было ничего о перезапуске постгресса, это уже мои рассуждения были

прошу прощения тогда, хотел помочь а вы теперь злитесь ?

Timur
17.09.2018
06:48:57
А OS какие?
ubuntu и там и там

Google
Alexander
17.09.2018
07:10:04
ubuntu и там и там
Значит pg_basebackup годится. Если с минимальным простоем, то вот это тоже норм вариант - https://www.2ndquadrant.com/en/resources/pglogical/ https://www.depesz.com/2016/11/08/major-version-upgrading-with-minimal-downtime/

Mike Chuguniy
17.09.2018
07:15:08
@flykens, ты зачем человеку всякое непотребство рекомендуешь, когда ему нужна репика межу двумя нодами одной мажорной версии?

Тем более, что по твоим же словам, оно тормозит, причем тормозит люто.

Alexander
17.09.2018
07:24:46
Тем более, что по твоим же словам, оно тормозит, причем тормозит люто.
Насколько я понял - нужна именно миграция, с минимальным простоем. Сколько оно будет переливать и синхронизировать перед остановкой основной БД - вопрос второй. Главное тут - критичность времени остановки, что pglogical сводит к минимуму. А завтра человеку понадобится перелить с разных версий PG, но с теми же требованиями, а решение уже будет обкатано)))

Mike Chuguniy
17.09.2018
07:28:59
А потоковая реплика не сводит к минимуму время простоя? о_О, Саш, ты чего вчера употреблял?

Timur
17.09.2018
07:40:20
там забавная история, в общем

я вышел на новую работу

а за несколько дней до этого полетел жёсткий диск на сервере (да, там не было рейда, не спрашивайте), полетел не полностью - фс ушла в рид-онли. База постгреса лежит на SSD, а полетел другой диск, который с системой

кое-как оно работает

однако рестартануть с новыми параметрами не получится - т.к. postgresql.conf лежит на ФС, смонтированной в рид-онли (да, я знаю про mount -o bind, но всё равно лишний раз трогать неохота - не знаю, как оно себя поведёт)

задача - перетащить на другой сервер базу, минимально задействуя существующий

смонтировали по nfs каталог на втором сервере, сейчас pg_basebackup переливает БД, в параметрах сменил через alter system checkpoint_timeout на 15m

задачу можно решить массой способов, я просто хотел бы минимизировать время простоя

Mike Chuguniy
17.09.2018
07:43:48
задача - перетащить на другой сервер базу, минимально задействуя существующий
А не получится. Вам в любом случае надо будет вычитывать все хотя бы живые данные. И pg_basebackup в этом случае предпочтительнее пофайлового копирования.

Timur
17.09.2018
07:44:29
данные на другом диске, с ним всё в порядке

Mike Chuguniy
17.09.2018
07:45:05
задачу можно решить массой способов, я просто хотел бы минимизировать время простоя
Да нет там массы способов, pg_basebackup (архивирование WAL-ов!!!), поднятие реплики, и вперёд!

Timur
17.09.2018
07:45:25
Да нет там массы способов, pg_basebackup (архивирование WAL-ов!!!), поднятие реплики, и вперёд!
угу, так и делаю, только проблема в том, что archive_mode у меня выключен :)

поэтому придётся доставать WAL из pg_wal

Google
Timur
17.09.2018
07:46:30
в общем, никакого особого рокетсаенса нет

задача почти наверняка тривиальнее некуда

Mike Chuguniy
17.09.2018
07:47:25
pg_basebackup с "-X stream"

Но для этого д/б включено max_wal_senders >= 2

А если нет, то рестарт

Куда ни кинь, везде поленом по тыковке.

Timur
17.09.2018
07:48:36
по дефолту в десятке вроде 10

там с nfs тоже была история (nfs-common не был установлен), пришлось делать dpkg -x для двух пакетов и потом через LD_PRELOAD=либа ./mount_nfs ... :)

в общем, ничего такого особо ужасного

я просто с базами редко работаю, сетевой инженер

Mike Chuguniy
17.09.2018
07:52:40
по дефолту в десятке вроде 10
show max_wal_senders в консоли для проверки

Alexander
17.09.2018
07:58:48
А потоковая реплика не сводит к минимуму время простоя? о_О, Саш, ты чего вчера употреблял?
Потоковая реплика, конечно, более предпочтительный вариант. Тем более, что postgresql.conf, как выяснилось, нельзя изменить. На банкет не оставался))

Timur
17.09.2018
07:58:49
pg_basebackup с "-X stream"
смотрите, оно же продолжает писать логи пока работает сервер, правильно? Т.е. я запускаю эту команду, потом параллельно запускаю слейв (когда оно закончит делать дамп основной базы), слейв у меня стартует в recovery, а логи стримятся запущенным pg_basebackup, я правильно понимаю?

Потоковая реплика, конечно, более предпочтительный вариант. Тем более, что postgresql.conf, как выяснилось, нельзя изменить. На банкет не оставался))
изменить можно (mount -o bind /tmp/pgconf /etc/postgresql), но как поведёт себя сервер при рестарте - неизвестно, поэтому не хотелось бы

Mike Chuguniy
17.09.2018
08:02:50
pg_basebackup с опцией -X stream вам в одном подключении вытянет данные, а во втором - пишущиеся в это время WAl-ы.

Timur
17.09.2018
08:04:13
Не надо запускать слейв параллельно с pg_basebackup, как вы себе это представляете?
я так понимаю, что pg_basebackup -X stream сперва дампит сами файлы БД, а затем дампит лог транзакции. Мануал говорит: Stream the write-ahead log while the backup is created. This will open a second connection to the server and start streaming the write-ahead log in parallel while running the backup. Therefore, it will use up two connections configured by the max_wal_senders parameter. As long as the client can keep up with write-ahead log received, using this mode requires no extra write-ahead logs to be saved on the master.

или я неправильно понимаю?

Mike Chuguniy
17.09.2018
08:07:01
Слово parallel - это сперва данные, потом лог?! о_О, хренассе, неделька начинается!

Timur
17.09.2018
08:08:37
Слово parallel - это сперва данные, потом лог?! о_О, хренассе, неделька начинается!
ок, параллельно данные и логи, но когда он закончит работу? Когда скопирует основные данные?

Google
Timur
17.09.2018
08:11:51
ладно, извините за тупые вопросы, разберусь. Извините за беспокойство :)

Yaroslav
17.09.2018
08:14:42
ок, параллельно данные и логи, но когда он закончит работу? Когда скопирует основные данные?
Когда скопирует основные данные и достаточно WAL для достижения консистентности полученной копии при recovery.

Timur
17.09.2018
08:18:13
Когда скопирует основные данные и достаточно WAL для достижения консистентности полученной копии при recovery.
копия-то будет консистентной, но мне нужна копия, которая будет актуальной :) у меня в голове сложилась картинка (ложная, я понимаю) о том, что pg_basebackup -X stream пишет данные на момент старта, а логи продолжает писать параллельно до тех пор, пока его не прервёшь. Такое поведение было бы хорошим для бесшовного (или почти бесшовного) переноса данных на реплику: стопаем мастер, последние данные уходят на слейв, перезапускаем слейв без recovery.conf и готово. Я подумал не в ту сторону, ещё раз извините.

Antony
17.09.2018
08:22:53
Всем привет, правильно понимаю, что в случае do $$ begin set enable_nestloop = False; select * from table1 inner join table2 on table1.id = table2.t1; end; $$ language 'plpgsql'; enable_nestloop = False будет применено только для текущей транзакции

Yaroslav
17.09.2018
08:26:16
копия-то будет консистентной, но мне нужна копия, которая будет актуальной :) у меня в голове сложилась картинка (ложная, я понимаю) о том, что pg_basebackup -X stream пишет данные на момент старта, а логи продолжает писать параллельно до тех пор, пока его не прервёшь. Такое поведение было бы хорошим для бесшовного (или почти бесшовного) переноса данных на реплику: стопаем мастер, последние данные уходят на слейв, перезапускаем слейв без recovery.conf и готово. Я подумал не в ту сторону, ещё раз извините.
> Копия-то будет консистентной, но мне нужна копия, которая будет актуальной :) Постоянно актуальной? Тогда Вам нужна репликация, очевидно (законченный backup же не будет обновляться волшебным образом ;) ). > что pg_basebackup -X stream пишет данные на момент старта, А где бы он мог их взять? Нет, конечно, он просто пишет то, что читает в каждый момент (считанное может представлять собой "мешанину" из неконсистентных страниц, естественно, но это неважно — "накатывание" WAL потом всё это выправит). > а логи продолжает писать параллельно до тех пор, пока его не прервёшь. Так бы он потенциально вечно их писал... А от backup-а ожидают, что он когда-нибудь закончится, обычно. :) > Такое поведение было бы хорошим для бесшовного (или почти бесшовного) переноса данных на реплику Да этот pg_basebackup и используется для инициализации реплики, которая потом "догоняется" до текущего состояния master с помощью последующего streaming/log shipping.

Antony
17.09.2018
08:27:45
Yaroslav Schekin спасибо

Timur
17.09.2018
08:31:56
>А где бы он мог их взять? Нет, конечно, он просто пишет то, что читает в каждый момент (считанное может представлять собой "мешанину" из неконсистентных страниц, естественно, но это неважно — "накатывание" WAL потом всё это выправит). вот это хороший момент, спасибо

Aleksandr
17.09.2018
08:33:58
>перезапускаем слейв без recovery.conf на самом деле нужно сделать промоут реплики до мастера и не нужно перезапускать ПГ

Mike Chuguniy
17.09.2018
08:48:52
Всем привет, правильно понимаю, что в случае do $$ begin set enable_nestloop = False; select * from table1 inner join table2 on table1.id = table2.t1; end; $$ language 'plpgsql'; enable_nestloop = False будет применено только для текущей транзакции
user=> do $$ begin set enable_nestloop = False; PERFORM * from t1 join t2 on t1.t1_id = t2.t1_id; end; $$ language 'plpgsql'; DO user=> show enable_nestloop; enable_nestloop ----------------- off (1 строка) user=> И обратите внимание на PERFORM

Antony
17.09.2018
08:49:36
Спасибо

Mike Chuguniy
17.09.2018
08:51:21
Насколько я понимаю документацию, любые параметры устанавливаются, самое малое, на сессию.

Yaroslav
17.09.2018
09:01:15
Спасибо
А Вам зачем, кстати? Если пытаетесь "хинтовать", может, лучше не стоит? ;)

Antony
17.09.2018
09:03:36
хотел на проде проверить запрос, но уже сделал через set enable_nestloop=false; big query; set enable_nestloop=false

на проде вместо hash join используется nestedloop и запрос очень сильно деградирует

это stable https://explain.depesz.com/s/gp5Fc

это prod https://explain.depesz.com/s/FDFo

Страница 987 из 1062