|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
Maxim Boguk, благодарю. Теперь лучше представляю себе их области применения. Правильно ли я понял, что pgbouncer лучше использовать для большого количества клиентов с мелкими запросами (до секунды), тогда как pgpool - для небольшого, но с тяжелым (>10 секунд)? Просто мне эта задача светит. Балансировать нагрузку между мастером и репликой для тяжелых запросов, возвращающих незначительное количество данных от не более, чем десятка-другого пользователей одновременно. Запросы сейчас ограничены использованием не более, чем 8 ядер. И идея кеша запросов мне показалась привлекательной. Так как эти тяжелые запросы, преимущественно, вызов хранимых процедур и встречаются с одними и теми же параметрами, но от разных пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 14:17 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
Maxim Boguk, Максим, подскажите пожалуйста, как корректно делать селекты в клиентской части. begin select column1 from table commit или все-таки rollback после получения данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2021, 16:05 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
kliff Maxim Boguk, Максим, подскажите пожалуйста, как корректно делать селекты в клиентской части. begin select column1 from table commit или все-таки rollback после получения данных? 1)по большому счету пофигу и так и так можно ни на что не влияет (если у вас таки только чтение было). 2)если вы заведомо знаете что у вас readonly нагрузка в транзакции то ЗАЧЕМ вы вообще открываете транзакцию???? Не только вредно но еще и в 99% типовых случаев совершенно бесполезно. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2021, 21:38 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
ptr128 Maxim Boguk, благодарю. Теперь лучше представляю себе их области применения. Правильно ли я понял, что pgbouncer лучше использовать для большого количества клиентов с мелкими запросами (до секунды), тогда как pgpool - для небольшого, но с тяжелым (>10 секунд)? Просто мне эта задача светит. Балансировать нагрузку между мастером и репликой для тяжелых запросов, возвращающих незначительное количество данных от не более, чем десятка-другого пользователей одновременно. Запросы сейчас ограничены использованием не более, чем 8 ядер. И идея кеша запросов мне показалась привлекательной. Так как эти тяжелые запросы, преимущественно, вызов хранимых процедур и встречаются с одними и теми же параметрами, но от разных пользователей. Если вам от пулера нужна балансировка запросов - ее проще на уровне приложения сделать (imho). Но можно и средствами pgpool и средствами pgbouncer ее сделать. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 00:52 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
Maxim Boguk kliff Maxim Boguk, Максим, подскажите пожалуйста, как корректно делать селекты в клиентской части. begin select column1 from table commit или все-таки rollback после получения данных? 1)по большому счету пофигу и так и так можно ни на что не влияет (если у вас таки только чтение было). 2)если вы заведомо знаете что у вас readonly нагрузка в транзакции то ЗАЧЕМ вы вообще открываете транзакцию???? Не только вредно но еще и в 99% типовых случаев совершенно бесполезно. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru 2. я так понял, что в postgres любой селект оборачивается в транзакцию либо если автокоммит, то автоматически, если нет автокоммит, то это надо делать руками. В документации "Согласно стандарту, выполнять START TRANSACTION, чтобы начать блок транзакции, необязательно: блок неявно начинает любая команда SQL." То есть транзакция открывается независимо от того открываю я ее сам внутри например php или нет. Вопрос только закрываю я ее сам в коде php или это делает autocommit. У меня в php используется pg_connect у которого нет настройки autocommit, поэтому для каждого запроса надо контролировать транзакцию самому. Ни понимаю как можно тогда выполнять селекты без транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 09:08 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
kliff, авторВ документации "Согласно стандарту, выполнять START TRANSACTION, чтобы начать блок транзакции, необязательно: блок неявно начинает любая команда SQL." Это где такое написано (я подозреваю или что то очень странное и старое или кривой перевод). авторНи понимаю как можно тогда выполнять селекты без транзакции. Эм... взять и выполнить select... что по вашему при этом произойдет? Прекрасно можно select и вообще любые запросы в базе без явного использования begin/commit Использование явных транзакций на RO блоках или на реплике - в 99% случаев неоправданно (и приводит как раз к проблем с пулом у pgbouncer например время от времени). 1% случаев оставляю на явное указание repeatable read уровня изоляции при старте транзакции (что я вижу КРАЙНЕ РЕДКО в реальной жизни). -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 15:54 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
Maxim Boguk kliff, авторВ документации "Согласно стандарту, выполнять START TRANSACTION, чтобы начать блок транзакции, необязательно: блок неявно начинает любая команда SQL." Это где такое написано (я подозреваю или что то очень странное и старое или кривой перевод). авторНи понимаю как можно тогда выполнять селекты без транзакции. Эм... взять и выполнить select... что по вашему при этом произойдет? Прекрасно можно select и вообще любые запросы в базе без явного использования begin/commit Использование явных транзакций на RO блоках или на реплике - в 99% случаев неоправданно (и приводит как раз к проблем с пулом у pgbouncer например время от времени). 1% случаев оставляю на явное указание repeatable read уровня изоляции при старте транзакции (что я вижу КРАЙНЕ РЕДКО в реальной жизни). -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru >Это где такое написано 11я версия https://postgrespro.ru/docs/postgresql/11/sql-start-transaction >Эм... взять и выполнить select... что по вашему при этом произойдет? наверное специфика моего приложения, но после просто взять и выполнить, у меня минут 3-7 селект висит в idle in transaction. Очевидно внутри pg_connect транзакция все таки стартует. > без явного использования begin/commit у меня в приложении нет возможности сделать autocommit. без явного использования begin/commit - а кто тогда обернет селект в begin/commit? сам пострис? Ведь селекты работают тоже только в транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 17:22 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
автор11я версия https://postgrespro.ru/docs/postgresql/11/sql-start-transaction а дальше прочесть: "Поведение PostgreSQL можно представить как неявное выполнение COMMIT после каждой команды, которой не предшествует START TRANSACTION (или BEGIN), и поэтому такое поведение часто называется «автофиксацией»" автор>Эм... взять и выполнить select... что по вашему при этом произойдет? наверное специфика моего приложения, но после просто взять и выполнить, у меня минут 3-7 селект висит в idle in transaction. Очевидно внутри pg_connect транзакция все таки стартует. это кривой / криво настроенный framework и надо начинать с этого лечить разобравшись как там ЯВНОЕ управление транзакциями включать иначе будут вот проблемы с вечными idle in transactions от чего будет всем плохл автор> без явного использования begin/commit у меня в приложении нет возможности сделать autocommit. без явного использования begin/commit - а кто тогда обернет селект в begin/commit? сам пострис? Ведь селекты работают тоже только в транзакции. Никто... точнее там запрос будет НЕЯВНО на стороне базы обернут в begin/commit хотя конечно никаких формальных begin/commit выполняется не будет в реальности... оно просто так работает. php по умолчанию с postgresql работает как раз с autocommit on и транзакции автоматически не начинаются. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 18:31 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
Maxim Boguk, >а дальше прочесть: но это не мой случай, потому что транзакция повисает не закрытая, значит приложение явно начинает где то транзакцию. фреймворка в этой системе вообще нет, скорее всего отсюда и проблемы, все самописное. Большое спасибо за помощь. Вроде суть уловил. Сейчас пока ситуация такая, что найти где отркывается транзакция не удалось, но установка коммит сразу после селектов позволила избавиться от idle in transaction и сервер стал на порядок шустрее и разгрузился по процессам в ОС. Сейчас еще конечно есть проблема с idle запросами, почему то есть такие, которые висят по 5-15 минут при том, что база не нагружена. Но это другая история, буду изучать еще. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2021, 09:55 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
Проблема была в HAproxy, в его настройках timeout client и timeout server HAproxy по своим (дефолтным) параметрам отключал простаивающие соединения. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2021, 08:19 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
D0KX Проблема была в HAproxy, в его настройках timeout client и timeout server HAproxy по своим (дефолтным) параметрам отключал простаивающие соединения. Лол - чувак. У меня на прошлой неделе была аналогичная трабла ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2021, 13:58 |
|
как работать с pgbouncer?
|
|||
---|---|---|---|
#18+
mefman D0KX Проблема была в HAproxy, в его настройках timeout client и timeout server HAproxy по своим (дефолтным) параметрам отключал простаивающие соединения. Лол - чувак. У меня на прошлой неделе была аналогичная трабла ))) Я чем дальше тем больше думаю что правильнее load balancing делать средствами самого pgbouncer через DNS round robin. Чем городить цепочку прилжение-haproxy-pgbouncer-postgresql Слишком уж тупой tcp балансер (haproxy) для такой задачи кривой как мо мне. PS: и да очень часто проблемы именно на уровне haproxy оказываются сложные в диагностике особенно если haproxy поставили не сказав от этом DBA. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2021, 14:18 |
|
|
start [/forum/topic.php?fid=53&gotonew=1&tid=1993964]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
13ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 153ms |
0 / 0 |