Size: a a a

pgsql – PostgreSQL

2021 February 12

ES

Evgeny Sologub in pgsql – PostgreSQL
Может у кого-то есть опыт тюнинга репликации.
Ситуация такая. Есть мастер, есть реплика.
PG10
На на мастере запустили довольно тяжелый запрос
который заполняет таблицу данными из других таблиц
размер таблицы около 2GB после заполнения.
Во время заполнения через некоторое время отвалилась реплика.
Предположил что реплике не хватило количества wal файлов
как я понял за это отвечает параметр конфигурации
wal_keep_segments
и сейчас он выставлен в 128
и всё работало отлично
видимо первый раз такая большая таблица попалась

вопрос - правильно ли я копаю?
и как правильно рассчитывать этот параметр?
и какие побочки могут быть если его увеличить?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Evgeny Sologub
Может у кого-то есть опыт тюнинга репликации.
Ситуация такая. Есть мастер, есть реплика.
PG10
На на мастере запустили довольно тяжелый запрос
который заполняет таблицу данными из других таблиц
размер таблицы около 2GB после заполнения.
Во время заполнения через некоторое время отвалилась реплика.
Предположил что реплике не хватило количества wal файлов
как я понял за это отвечает параметр конфигурации
wal_keep_segments
и сейчас он выставлен в 128
и всё работало отлично
видимо первый раз такая большая таблица попалась

вопрос - правильно ли я копаю?
и как правильно рассчитывать этот параметр?
и какие побочки могут быть если его увеличить?
у вас WAL файлы быстро “ротируются”. предположим, что все 2Gb попали в WAL (это 128 сегментов).
чекпойнты из коробки срабатывают при записи 1GB (64 сегмента), значит у вас было 2 чекпойнта, значит WAL-ы успели отротироваться на мастере.
если всё это было быстрее, чем эти ваши 2GB могли пролезть по сети — мы пришли к тому, что на мастере мы слишком быстро промотали WAL.

я бы рекомендовал посмотреть на настройки контрольных точек в первую очередь, при адекватных настройках мастер не будет так быстро ротировать сегменты.
я обычно ставлю таймаут в 1 час и ставлю max_wal_size=16G

ну и да, wal_keep_segments тоже помогут. 1024 = +16GB на диске
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Evgeny Sologub
Может у кого-то есть опыт тюнинга репликации.
Ситуация такая. Есть мастер, есть реплика.
PG10
На на мастере запустили довольно тяжелый запрос
который заполняет таблицу данными из других таблиц
размер таблицы около 2GB после заполнения.
Во время заполнения через некоторое время отвалилась реплика.
Предположил что реплике не хватило количества wal файлов
как я понял за это отвечает параметр конфигурации
wal_keep_segments
и сейчас он выставлен в 128
и всё работало отлично
видимо первый раз такая большая таблица попалась

вопрос - правильно ли я копаю?
и как правильно рассчитывать этот параметр?
и какие побочки могут быть если его увеличить?
> Предположил что реплике не хватило количества wal файлов

Да, скорее всего.

>  за это отвечает параметр конфигурации wal_keep_segments

В том числе, да.

> и как правильно рассчитывать этот параметр?

А почему бы не посмотреть на слоты репликации вместо этого параметра?
источник

J

John Roe in pgsql – PostgreSQL
источник

М

Максим in pgsql – PostgreSQL
Подскажите пожалуйста, в psql 1 юзер может делать 1 запрос?
В рамках 1го коннекта или вообще?
источник

S

Slvr in pgsql – PostgreSQL
@molescenko странный вопрос 😉 сколько угодно запросов
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
"юзер" это реквизиты подключения, под этими реквизитами могут подключаться разные клиенты и делать запросы в бд. запросы выполняются синхронно и последовательно - клиент отправляет запрос, бд его выполняет, клиент ждет его выполнения, после завершения можно отправлять следующий запрос... и так далее.
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
согласен да, запрос сформулирован очень невнятно )))
источник

S

Slvr in pgsql – PostgreSQL
Теоретический вопрос по перформансу (негде проверять сейчас, да и скорее просто интересно чем критично)😄

Есть скажем 1млн записей id,name,some_number_val

содержимое поля “name” всегда содержит некоторый префикс. K примеру: “B: Nike”; “C: Running Shoes”; “G: Shoes”

Учитывая что по name есть индекс: Что будет быстрее - запросы с фильтром: where name like “B:%”  или запрос по полю some_type = “B” (ситуация в которой префикс продублирован в отдельное поле)
источник

S

Slvr in pgsql – PostgreSQL
при вынесении в отдельное поле cardinality будет никакой - 3 значения
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Evgeny Sologub
Может у кого-то есть опыт тюнинга репликации.
Ситуация такая. Есть мастер, есть реплика.
PG10
На на мастере запустили довольно тяжелый запрос
который заполняет таблицу данными из других таблиц
размер таблицы около 2GB после заполнения.
Во время заполнения через некоторое время отвалилась реплика.
Предположил что реплике не хватило количества wal файлов
как я понял за это отвечает параметр конфигурации
wal_keep_segments
и сейчас он выставлен в 128
и всё работало отлично
видимо первый раз такая большая таблица попалась

вопрос - правильно ли я копаю?
и как правильно рассчитывать этот параметр?
и какие побочки могут быть если его увеличить?
А я бы настроил archive_command на мастере и restore_command на реплике. Слоты репликации имеют очень неприятное свойство забивать $PG_DATA, когда реплика начинает отставать, а вы с этим ничего поделать не можете. Было и такое - диски на реплике просели на запись, и оппа! 95% PG_DATA занято. Аврал, полкомпании рвут все разные части тел, ну и вот это вот всё...
источник

AN

Alexander Nikitin in pgsql – PostgreSQL
ради справедливости надо отметить, что в 13 версии запилили параметр max_slot_wal_keep_size, который как раз и призван решать эту проблему
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
Slvr
Теоретический вопрос по перформансу (негде проверять сейчас, да и скорее просто интересно чем критично)😄

Есть скажем 1млн записей id,name,some_number_val

содержимое поля “name” всегда содержит некоторый префикс. K примеру: “B: Nike”; “C: Running Shoes”; “G: Shoes”

Учитывая что по name есть индекс: Что будет быстрее - запросы с фильтром: where name like “B:%”  или запрос по полю some_type = “B” (ситуация в которой префикс продублирован в отдельное поле)
Если индекс построен правильно с использованием магии "varchar_pattern_ops" и работает нормально, то на миллионе записей разница будет гомеопатическая.
источник

R

Radist in pgsql – PostgreSQL
Роман Жарков
Если индекс построен правильно с использованием магии "varchar_pattern_ops" и работает нормально, то на миллионе записей разница будет гомеопатическая.
Интересно, а если поле type неселективное (например, там 5 значений на 10000 строк), а по name не построена гистограмма. Он ведь теоретически может при отборе по name пойти по индексу вместо того, чтобы всю таблицу смотреть, и это в данном случае может быть неоптимальным вариантом. Или я не прав?
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
Radist
Интересно, а если поле type неселективное (например, там 5 значений на 10000 строк), а по name не построена гистограмма. Он ведь теоретически может при отборе по name пойти по индексу вместо того, чтобы всю таблицу смотреть, и это в данном случае может быть неоптимальным вариантом. Или я не прав?
Теоретически оно и сегфолтнуться может.
Но я вопроса не понял.
источник

T

Tima in pgsql – PostgreSQL
Ребят, мне нужно отсортировать таблицу по году, и обнулить sequence, чтоб отсчёт шел от 1, как мне это сделать?
источник

T

Tima in pgsql – PostgreSQL
В инете гуглю, но чёт все с ошибками показывает
источник

ГА

Георгий Ава... in pgsql – PostgreSQL
Tima
Ребят, мне нужно отсортировать таблицу по году, и обнулить sequence, чтоб отсчёт шел от 1, как мне это сделать?
Не понятно какая связь м/у сортировкой и сбросом сиквенса
источник

T

Tima in pgsql – PostgreSQL
Ну у меня есть данные, и они не по порядку. Т.е например 2001 год стоит под id 5, когда должен быть под id 1.
Я хочу остортировать по году, и перезаписать новый sequence. Это возможно ?
источник

ГА

Георгий Ава... in pgsql – PostgreSQL
Напрямую наверное нет, id скорее всего uniq. Ч/з промежуточное значение.
источник