Size: a a a

pgsql – PostgreSQL

2021 January 21

SG

Sergey Gr in pgsql – PostgreSQL
Станислав Линник
Беда в том что pg не справляется. в pg_all_stat_activity куууууча UPDATE ивентов, с блокировками(как LWLOCK так и Lock). Короче чето не вывозит PG нагрузку в 5к QPS. Вот я думаю, если избавиться от транзакций, то сильно легче будет и не будет ли каких касяков с апдейтов поля( хотя по идее он должен лочить строку, на момент выполнения инсерта)
Похоже на pgbench. 5k tps на ядро - нормально. А как вы собираетесь избавиться от транзакций?
источник

am

a m in pgsql – PostgreSQL
Станислав Линник
Всем привет, такой вопрос: имеется запрос, который выполняется через транзакцию
UPDATE accounts SET balance = balance + 100.00 WHERE acctnum = 11111;
Причем много запросов, как в тот же самый acctnum = 11111, так и по другим acctnum
Если смотреть по блокировкам то вижу такое
 state  |  pid   |     wait_event      | wait_event_type
-------+--------+---------------------+-----------------+
active |  59051 | transactionid       | Lock            

Если избавиться от транзацкий, то какие проблемы я могу словить?

З.Ы. конечно могут быть взаимоблокировки, тут я хз, если подскажите как их отловить то еще лучше
Если вы пишете биллинг, и у вас будет хоть какая-то параллельная работа, а не три клиента в сутки, то настоятельно рекомендую изучить:
1) как работает MVCC в постгресе;
2) как работают блокировки.
Не глядя на конкретный код нельзя сказать. какие проблемы будут. Можно только сказать «погода на марсе вместо балансов», что клиенты не очень любят (я проверял на них).
источник

GH

Gl Hf in pgsql – PostgreSQL
Добрый день! Кто может посоветовать бесплатные курсы или литературу, где будет подробно и не очень сухо рассказан курс по sql (включая вложенные запросы, оконные функции, работа с временными функциями, olap кубами), кроме sql-ex?
источник

am

a m in pgsql – PostgreSQL
Станислав Линник
Беда в том что pg не справляется. в pg_all_stat_activity куууууча UPDATE ивентов, с блокировками(как LWLOCK так и Lock). Короче чето не вывозит PG нагрузку в 5к QPS. Вот я думаю, если избавиться от транзакций, то сильно легче будет и не будет ли каких касяков с апдейтов поля( хотя по идее он должен лочить строку, на момент выполнения инсерта)
INSERT ничего не лочит. Хотя я вообще плохо понимаю, что вы там имеете в виду.
источник

СЛ

Станислав Линник... in pgsql – PostgreSQL
Sergey Gr
Похоже на pgbench. 5k tps на ядро - нормально. А как вы собираетесь избавиться от транзакций?
Похоже я не понимаю как запросы работают :)
Если я напрямую коннекчусь к базе и делаю UPDATE\INSERT\DELETE, то я не могу откатиться, но если я явно делаю транзакцию, то да откатиться я могу.
Или я неправильно понимаю wait_event transactionid ?

З.Ы. я не разраб
источник

SG

Sergey Gr in pgsql – PostgreSQL
a m
INSERT ничего не лочит. Хотя я вообще плохо понимаю, что вы там имеете в виду.
:)
источник

GH

Gl Hf in pgsql – PostgreSQL
Gl Hf
Добрый день! Кто может посоветовать бесплатные курсы или литературу, где будет подробно и не очень сухо рассказан курс по sql (включая вложенные запросы, оконные функции, работа с временными функциями, olap кубами), кроме sql-ex?
и желательно вводный по нескольким субд (mysql, postgresql)
источник

am

a m in pgsql – PostgreSQL
Что «:)»?
источник

SG

Sergey Gr in pgsql – PostgreSQL
Станислав Линник
Похоже я не понимаю как запросы работают :)
Если я напрямую коннекчусь к базе и делаю UPDATE\INSERT\DELETE, то я не могу откатиться, но если я явно делаю транзакцию, то да откатиться я могу.
Или я неправильно понимаю wait_event transactionid ?

З.Ы. я не разраб
Здесь у вас автокоммит включен. И когда вы явно делаете транзакцию вы сами управляете коммитом.
источник

SG

Sergey Gr in pgsql – PostgreSQL
a m
Что «:)»?
Как минимум ShareLock на таблицу в которую вставляете (чтоб никто из под insert'а её не дропнул) Что-то из локов на блок в памяти в который идёт вставка. И это если не надо выделять новые блоки.
источник

am

a m in pgsql – PostgreSQL
Станислав Линник
Похоже я не понимаю как запросы работают :)
Если я напрямую коннекчусь к базе и делаю UPDATE\INSERT\DELETE, то я не могу откатиться, но если я явно делаю транзакцию, то да откатиться я могу.
Или я неправильно понимаю wait_event transactionid ?

З.Ы. я не разраб
> З.Ы. я не разраб
Если вы системный администратор и решили ускорить биллинг, то не надо, пожалуйста.
источник

am

a m in pgsql – PostgreSQL
Sergey Gr
Как минимум ShareLock на таблицу в которую вставляете (чтоб никто из под insert'а её не дропнул) Что-то из локов на блок в памяти в который идёт вставка. И это если не надо выделять новые блоки.
AcessShareLock — это не блокировка, а черт знает что.
Давайте еще непропылесосенный удаленный мусор за блокировки считать. По одной на строку.
источник

꧁S

꧁Александр Smirnov꧂... in pgsql – PostgreSQL
источник

СЛ

Станислав Линник... in pgsql – PostgreSQL
a m
Если вы пишете биллинг, и у вас будет хоть какая-то параллельная работа, а не три клиента в сутки, то настоятельно рекомендую изучить:
1) как работает MVCC в постгресе;
2) как работают блокировки.
Не глядя на конкретный код нельзя сказать. какие проблемы будут. Можно только сказать «погода на марсе вместо балансов», что клиенты не очень любят (я проверял на них).
У нас не биллинг, скинул пример из руководства по pg, cпасибо
я тут пообщался с разрабом, логика такая:
Воркеры асинхронные
Делается селект, если такого acc_id нет, то делается INSERT,  но если acc_id есть то делает UPDATE поля.
В тоже время другой воркер делает то же самое.
Отсюда и блокировки
источник

DV

Dmitry Vasiliev in pgsql – PostgreSQL
а не подскажете как patroni
можно заставить проверять не то что pg запущен, а дополнительные кастомные проверки - например диск доступен на запись/чтение?
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Gl Hf
и желательно вводный по нескольким субд (mysql, postgresql)
По постгресу - официальная документация. Лучше нет и неизвестно.
источник

am

a m in pgsql – PostgreSQL
Станислав Линник
У нас не биллинг, скинул пример из руководства по pg, cпасибо
я тут пообщался с разрабом, логика такая:
Воркеры асинхронные
Делается селект, если такого acc_id нет, то делается INSERT,  но если acc_id есть то делает UPDATE поля.
В тоже время другой воркер делает то же самое.
Отсюда и блокировки
Да, один UPDATE по данной строке заставить другой ждать. Без явной транзакции — тоже.
источник

K

Kamoliddin in pgsql – PostgreSQL
Добрый день. Дана такая таблица и мне нужно сгруппировать элементы где каждая группа начинается с FORMED и все элементы до следующего FORMED. На данной картинке 2 такие группы. Как можно такое реализовать ?
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
Kamoliddin
Добрый день. Дана такая таблица и мне нужно сгруппировать элементы где каждая группа начинается с FORMED и все элементы до следующего FORMED. На данной картинке 2 такие группы. Как можно такое реализовать ?
Order by?
источник

K

Kamoliddin in pgsql – PostgreSQL
Ilia Zviagin
Order by?
уже по id отсортировано
источник