powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как работать с pgbouncer?
12 сообщений из 37, страница 2 из 2
как работать с pgbouncer?
    #40035421
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

благодарю. Теперь лучше представляю себе их области применения.
Правильно ли я понял, что pgbouncer лучше использовать для большого количества клиентов с мелкими запросами (до секунды), тогда как pgpool - для небольшого, но с тяжелым (>10 секунд)?

Просто мне эта задача светит. Балансировать нагрузку между мастером и репликой для тяжелых запросов, возвращающих незначительное количество данных от не более, чем десятка-другого пользователей одновременно. Запросы сейчас ограничены использованием не более, чем 8 ядер. И идея кеша запросов мне показалась привлекательной. Так как эти тяжелые запросы, преимущественно, вызов хранимых процедур и встречаются с одними и теми же параметрами, но от разных пользователей.
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40036844
kliff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

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

begin

select column1 from table

commit или все-таки rollback после получения данных?
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40036939
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kliff
Maxim Boguk,

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

begin

select column1 from table

commit или все-таки rollback после получения данных?


1)по большому счету пофигу и так и так можно ни на что не влияет (если у вас таки только чтение было).

2)если вы заведомо знаете что у вас readonly нагрузка в транзакции то ЗАЧЕМ вы вообще открываете транзакцию???? Не только вредно но еще и в 99% типовых случаев совершенно бесполезно.



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40036973
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
Maxim Boguk,

благодарю. Теперь лучше представляю себе их области применения.
Правильно ли я понял, что pgbouncer лучше использовать для большого количества клиентов с мелкими запросами (до секунды), тогда как pgpool - для небольшого, но с тяжелым (>10 секунд)?

Просто мне эта задача светит. Балансировать нагрузку между мастером и репликой для тяжелых запросов, возвращающих незначительное количество данных от не более, чем десятка-другого пользователей одновременно. Запросы сейчас ограничены использованием не более, чем 8 ядер. И идея кеша запросов мне показалась привлекательной. Так как эти тяжелые запросы, преимущественно, вызов хранимых процедур и встречаются с одними и теми же параметрами, но от разных пользователей.


Если вам от пулера нужна балансировка запросов - ее проще на уровне приложения сделать (imho).
Но можно и средствами pgpool и средствами pgbouncer ее сделать.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40036998
kliff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, поэтому для каждого запроса надо контролировать транзакцию самому.

Ни понимаю как можно тогда выполнять селекты без транзакции.
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40037173
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kliff,

авторВ документации "Согласно стандарту, выполнять START TRANSACTION, чтобы начать блок транзакции, необязательно: блок неявно начинает любая команда SQL."

Это где такое написано (я подозреваю или что то очень странное и старое или кривой перевод).

авторНи понимаю как можно тогда выполнять селекты без транзакции.

Эм... взять и выполнить select... что по вашему при этом произойдет?

Прекрасно можно select и вообще любые запросы в базе без явного использования begin/commit

Использование явных транзакций на RO блоках или на реплике - в 99% случаев неоправданно (и приводит как раз к проблем с пулом у pgbouncer например время от времени).
1% случаев оставляю на явное указание repeatable read уровня изоляции при старте транзакции (что я вижу КРАЙНЕ РЕДКО в реальной жизни).


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40037232
kliff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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? сам пострис? Ведь селекты работают тоже только в транзакции.
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40037254
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор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
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40037346
kliff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

>а дальше прочесть:
но это не мой случай, потому что транзакция повисает не закрытая, значит приложение явно начинает где то транзакцию.
фреймворка в этой системе вообще нет, скорее всего отсюда и проблемы, все самописное.


Большое спасибо за помощь. Вроде суть уловил. Сейчас пока ситуация такая, что найти где отркывается транзакция не удалось, но установка коммит сразу после селектов позволила избавиться от idle in transaction и сервер стал на порядок шустрее и разгрузился по процессам в ОС. Сейчас еще конечно есть проблема с idle запросами, почему то есть такие, которые висят по 5-15 минут при том, что база не нагружена. Но это другая история, буду изучать еще.
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40079498
D0KX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема была в HAproxy, в его настройках timeout client и timeout server
HAproxy по своим (дефолтным) параметрам отключал простаивающие соединения.
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40079582
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D0KX
Проблема была в HAproxy, в его настройках timeout client и timeout server
HAproxy по своим (дефолтным) параметрам отключал простаивающие соединения.

Лол - чувак. У меня на прошлой неделе была аналогичная трабла )))
...
Рейтинг: 0 / 0
как работать с pgbouncer?
    #40079587
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как работать с pgbouncer?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]