@pgsql

Страница 952 из 1062
Tim
23.08.2018
17:45:48
а на какого масштаба базе?

Айтуар
23.08.2018
17:46:30
а на какого масштаба базе?
Размер БД максимум 150ГБ

Tim
23.08.2018
17:46:51
ну у нас что-то типа того же ожидается

максимум 500

Google
Tim
23.08.2018
17:47:11
вот, и самое главное - вы его используете на slave же?

и base backup оттуда делается?

Айтуар
23.08.2018
17:49:10
вот, и самое главное - вы его используете на slave же?
Нет. У нас асинхронная репликация и нет больших нагрузок на БД.

Tim
23.08.2018
17:49:39
понятно, спасибо

Andrey
23.08.2018
18:42:28
Подскажите можно ли настроить постгрес базу чтобы она не убивалась?поясню. Есть несколько серверов телеметрии которые шлют данные в постгрес базу. Есть около 5 серверов которые читают данные из базы. Периодически наблюдаю картину что память выедается процессами постгреса. Затем начинает писать в своп 16гб. Потом убивается оом киллером.

Andrei
23.08.2018
18:44:21
Сколько открытых коннектов?

Нет ли сессий простаивающих в транзак

*транзакции?

Andrey
23.08.2018
18:56:43
Yaroslav
23.08.2018
19:07:37
Andrey
23.08.2018
19:09:01
pg_stat_activity
Понял спасибо

pg_stat_activity
Я так понял это таблица для анализа что творится сейчас. Придется заводить в мониторинг через скрипт чтобы анализировать. Проблема плавающая

Yaroslav
23.08.2018
20:29:05
Я так понял это таблица для анализа что творится сейчас. Придется заводить в мониторинг через скрипт чтобы анализировать. Проблема плавающая
Можете логи на максимум "выкрутить" (log_statement = 'all') и поискать/попробовать понять, что происходит. Если потребление памяти — единственная проблема, трудно что-то сразу подсказать...

Google
Dmitry
24.08.2018
08:41:37
подскажи плиз, есть ли параметр, которым можно регулировать extend size у relation (pg_toast точнее)?

Sergey
24.08.2018
08:47:41
Dmitry
24.08.2018
08:48:02
нет. у меня овердохера exclusivelocks на extend pg_toast

как увеличить pg_toast большими блоками

Sergey
24.08.2018
08:48:33
Понял

Dmitry
24.08.2018
08:56:53
Понял
https://github.com/postgres/postgres/blob/322548a8abe225f2cfd6a48e07b99e2711d28ef7/src/backend/access/heap/hio.c#L529

где-то здесь судя по всему

Sergey
24.08.2018
09:08:54
Интересно каково соотношение вызовов просто ReadBufferBI к RelationAddExtraBlocks

Dmitry
24.08.2018
09:11:01
Sergey
24.08.2018
09:11:08
Кажется что одиночный аллоцированный блок может удовлетворить большую пачку ожидающих расширения relation воркеров. А уж как это соотнесётся с toast, где всё бьётся на chunk'и

Коэффициент расширения хороший - extraBlocks = Min(512, lockWaiters * 20); https://doxygen.postgresql.org/hio_8c.html#ab5c16550c2b170cd03a1c87756066b8e

Alexey
24.08.2018
10:02:59
Всем привет. Подскажите пожалуйста, почему при исполнении этой команды CMD ["postgres", "-c" , "pg_restore -h 127.0.0.1 -U postgres -F t -d nseec /tmp/nseec_dump.tar"] В докере, мне выдает ошибку : 2018-08-24 08:31:57.247 GMT [1] FATAL: -c pg_restore -h 127.0.0.1 -U postgres -F t -d nseec /tmp/nseec_dump.tar requires a value Хотя я следую инструкции с офф сайта : CMD ["executable","param1","param2"] Может я не так это понимаю?)

Maks
24.08.2018
10:07:48
а не пробовали? CMD ["postgres", "-c" , "'pg_restore -h 127.0.0.1 -U postgres -F t -d nseec /tmp/nseec_dump.tar'"]

второй параметр в одинакрые кавычки

Dmitry
24.08.2018
10:11:53
"postgres", "-c" , наверное имеется ввиду что надо запустить под пользователем postgres команду pg_restore. а у вас написано что выполнить команду postgres.

Alexey
24.08.2018
10:21:38
а не пробовали? CMD ["postgres", "-c" , "'pg_restore -h 127.0.0.1 -U postgres -F t -d nseec /tmp/nseec_dump.tar'"]
2018-08-24 10:13:44.375 GMT [1] FATAL: -c 'pg_restore -h 127.0.0.1 -U postgres -F t -d nseec /tmp/nseec_dump.tar' requires a value Уже близко ) Но, пока не работает.

Dmitry
24.08.2018
10:23:07
ну вы обратились не по адресу. не в тот чатик. разберитись с docker. команда для востановления - pg_restore -h 127.0.0.1 -U postgres -F t -d nseec /tmp/nseec_dump.tar правильная.

Anton
24.08.2018
11:06:18
Google
Anton
24.08.2018
11:06:39
В контейнере не надо директорию кластера хранить

Alexey
24.08.2018
11:11:15
В контейнере не надо директорию кластера хранить
Это мне уже подсказали, потом сделаю volume. Сейчас больше волнует pg_restore. В CMD он не отрабатывает.. Думаю кто-то из чата это делал... Подскажет

Alexey
24.08.2018
11:12:11
а порт прокинут в контейнер?
Ой, в docker-compose : ports: - "5432:5432"

Anton
24.08.2018
11:12:58
Это мне уже подсказали, потом сделаю volume. Сейчас больше волнует pg_restore. В CMD он не отрабатывает.. Думаю кто-то из чата это делал... Подскажет
Мне кажется, что так лучше не делать. Зачем сувать в cmd такие вещи ума не приложу даже. Я бы на том же уровне, где вы контейнер постгреса создаете, выполнял бы команду внутри созданного контейнера.

Alexey
24.08.2018
11:14:04
Мне кажется, что так лучше не делать. Зачем сувать в cmd такие вещи ума не приложу даже. Я бы на том же уровне, где вы контейнер постгреса создаете, выполнял бы команду внутри созданного контейнера.
Блин, я это пытался. Делал sh файл, который бы запускал контейнер , ждал пока база развернется, а потом выполнял pg_restore. Но это такие костыли. Может у вас есть другие варианты?

Nikita
24.08.2018
11:14:33
@AlexeyMozgo сдается мне, что нужно еще указать порт -p при pg_restore

Alexey
24.08.2018
11:15:36
@AlexeyMozgo сдается мне, что нужно еще указать порт -p при pg_restore
Не помогло 2018-08-24 11:17:15.090 GMT [1] FATAL: -c ' pg_restore -h 127.0.0.1 -p 5432 -U postgres -F t -d nseec /tmp/nseec_dump.tar' requires a value

Nikita
24.08.2018
11:19:12
подключаетесь то через сеть, а не через unix-сокет

если прописать в pg_hba.conf типа host all all 127.0.0.1/32 trust(что я не рекомендую), то может заработать

Alexey
24.08.2018
11:21:05
Это на мой взгляд самое правильное применение для докера будет. Скорее всего что-то в sh неправильно
Как сделать просто healthcheck базы данных ? Я делал на основе pg_isready , либо просто стучался в определенную БД.

подключаетесь то через сеть, а не через unix-сокет
Суть в том, что команда pg_restore -h 127.0.0.1 -U postgres -F t -d nseec /tmp/nseec_dump.tar Работает внутри запущенного контейнера. А при запуске - нет.

Google
Alexey
24.08.2018
11:49:30
Уберите это и должно заработать. 3 раз пишу.
CMD ["postgres", "'pg_restore -h 127.0.0.1 -p 5432 -U postgres -F t -d nseec /tmp/nseec_dump.tar'"] Выводит: postgres: invalid argument: "'pg_restore -h 127.0.0.1 -p 5432 -U postgres -F t -d nseec /tmp/nseec_dump.tar'" Try "postgres --help" for more information.

Alexey
24.08.2018
11:51:05
Вы postgres так до победного не уберёте ?
А кто мне при запуске контейнера будет ранить postgres?

Dmitry
24.08.2018
11:51:05
Вы вызываете команду postgres а не команду pg_restore

postgres впереди не нужен

Это своя команда к восстановлению не имеет отношения

Девупс который мы заслужили!

Alexey
24.08.2018
11:55:44
Вы вызываете команду postgres а не команду pg_restore
/usr/local/bin/docker-entrypoint.sh: line 172: /'pg_restore -h 127.0.0.1 -p 5432 -U postgres -F t -d nseec /tmp/nseec_dump.tar': No such file or directory Вот что выводит при отсутствии postgres

Alexey
24.08.2018
11:58:39
Это своя команда к восстановлению не имеет отношения
CMD [ "pg_restore", "-h", "127.0.0.1", "-U", "postgres", "-F", "t", "-d", "nseec", "/tmp/nseec_dump.tar"] Вот так заработало. Но, так как база не запущена , то выдает ошибку : pg_test | pg_restore: [archiver (db)] connection to database "nseec" failed: could not connect to server: Connection refused pg_test | Is the server running on host "127.0.0.1" and accepting pg_test | TCP/IP connections on port 5432? Теперь, надо как-то перед restore запустить бд

Mike Chuguniy
24.08.2018
12:09:22
А CMD, судя по докам, д/б одна в докер-файле... @AlexeyMozgo я скажу вам грустную печальную вещь, но прийдеца потерпеть - изучите, пожалуйста, сначала документацию по докеру, а потом уже задавайте вопросы, когда раза с десятого не получится то, что надо.

Mike Chuguniy
24.08.2018
12:11:10
Изучайте (именно изучайте, а не галопом по Еропам!) доку по докеру - других путей познания нет.

Там ещё какие-то энтрипойнты есть...

В смысле в докере

Slava
24.08.2018
12:18:48
всем привет. Такой вопрос, что будет если с разных машин одновременно открыть два серверных курсора с одинаковым именем?

запрос на обоих одинаковый

Anton
24.08.2018
13:15:51
Это я знаю и если прописапн 2 CMD, то будет выполняться последняя..
Не делайте pg restore таким способом. Подумайте еще раз. Скорее всего можно сделать по другому. Это плохая практика. Запускаете контейнер. У него каталог кластера вынесен биндом на хост. Далее вы с помощью команды для этого контейнера ресторите базу и продолжаете работать дальше. Если вышла новая версия - обновляете образ контейнера и удаляете/создаете новый контейнер, обновляете кластер на новую версию. А тот вариант, что вы хотите сделать - это прям совсем страшно. Вам докер тогда и не нужен, если его так использовать. Я это как то так вижу.

Google
OracleHelp
24.08.2018
14:24:48
OracleHelp

https://t.me/oraclehelp

Сергей
24.08.2018
15:12:25
Ребят, такой вопрос по локам. посгрес 9.6, уровень read commited. делаю много паралельных запросов "SELECT 1 FROM table WHERE id IN (locking_ids) FOR UPDATE"; когда locking_ids пересекаются периодически возникают дедлоки. не оч понятно почему так получается, я предполагал, что посгрес атомарно ставит лок на все строки из выборки, но получается что нет. прав ли я? у кого есть идеи как это пофиксить? есть идеи повысить уровень изоляции и сделать с ретрайями, но там очередь может образоваться

S
24.08.2018
15:19:58
конечно НЕ атомарно, а отдельно каждую строку лочит

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

Из-за разного порядка взятия блокировки и возникают deadlock

Сергей
24.08.2018
15:21:43
а какие варианты решения проблемы?

S
24.08.2018
15:22:16
брать блокировки в одинаковом порядке, например order by id

Сергей
24.08.2018
15:23:35
брать блокировки в одинаковом порядке, например order by id
СПАСИБО БОЛЬШОЕ! стресс тест прошел))

S
24.08.2018
15:46:58
:-)

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