2012-04-28 2 views
5

Я пытаюсь настроить PgPool для приема запросов около 150. Сервер Postgres настроен на прием только 100 соединений. Все, что нужно за 100, должно быть объединено PgPool. Кажется, я этого не понимаю. Я только требую PgPool для очереди запросов, моя текущая конфигурация не делает этого. Из моего теста JMeter, когда я пытаюсь получить соединение за пределами 100, postgres дает мне сообщение об ошибке PSQL: sorry, too many clients.Хорошая конфигурация PgPool II

я только настроил PGPool со следующими параметрами:

listen_address = 'localhost' 
port = 9999 
backend_hostname0 = 'localhost' 
backend_port0 = 5432 
num_init_children = 100 
max_pool = 4 
child_life_time =120 
child_max_connections = 0 
connections_life_tome = 120 
client_idle_limit = 0 

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

+0

Вы используете целевой экземпляр pgpool в своем приложении, а не напрямую подключаетесь к Postgresql? –

+0

Я подключаюсь к серверу postgres через порт PGPool 9999 'jdbc: postgresql: // localhost: 9999/dbname? User = имя пользователя и пароль = passwordofuser' –

ответ

2

Первое, что нужно, чтобы выяснить, что вы хотите, как максимальный размер бассейна. Производительность PostgreSQL (как с точки зрения пропускной способности, так и с задержкой) обычно лучше всего, когда максимальное количество активных подключений находится где-то рядом ((2 * число ядер) + эффективный-шпиндель-счет). Эффективное количество шпинделей может показаться сложным: если ваш активный набор данных полностью кэшируется, считайте его равным нулю, например. Не учитывайте дополнительные потоки от гиперпотока как ядра для этого вычисления. Также обратите внимание, что из-за проблем с задержкой в ​​сети вам может понадобиться пул, немного больший, чем расчетное число, чтобы поддерживать это количество подключений активным. Возможно, вам придется сделать некоторые тесты, чтобы найти сладкое место для вашего оборудования и рабочей нагрузки.

Настройка, которую необходимо отрегулировать, - child_max_connections, с num_init_children не может быть меньше или равно.

+0

2 * число ядер + эффективный шпиндель-счет? для параметра num_init_children? не могли бы вы привести пример? я не уверен, что понял .. –

+0

Предположим, у вас есть четырехъядерный процессор с гиперпотоком. Это четыре ядра, поэтому вы, вероятно, можете использовать до восьми активных подключений к базе данных. Допустим, у вас есть 6-дисковый RAID 10 для данных. Если вы полностью кэшированы, вы, вероятно, ничего не добавите, потому что диски не используются для большого количества случайных чтений. Если вы привязаны к диску, то вы считаете, что шесть, доведя вас до 14 подключений. Если вы частично кэшированы, эффективный размер кеша, вероятно, находится где-то посередине. Начните оттуда и испытайте немного большие и меньшие пулы с вашей рабочей нагрузкой. – kgrittn

+0

Ну, это заявление из вики PgPool помогло мне: - Таким образом, max_pool, num_init_children, max_connections, superuser_reserved_connections должны удовлетворять следующей формуле: max_pool * num_init_children <= (max_connections - superuser_reserved_connections) (не требуется аннулирование запроса). я изменил свою конфигурацию 'listen_address = 'локальный' порт = 9999 backend_hostname0 = 'локальный' backend_port0 = 5432 num_init_children = 25 max_pool = 4 child_life_time = 120 child_max_connections = 100 connections_life_tome = 120 client_idle_limit = 25' –

4

«child_max_connections» в pgpool НЕ является максимально допустимым подключением к БД. Это количество раз, когда объединенное соединение может использоваться до того, как оно завершится и перезапустится. Он должен перерабатывать потоки соединений и останавливать утечки памяти.

Формула max_pool x num_init_children описывает максимальное количество соединений, которые pgpool сделает в Postgresql. Очевидно, что это должно быть меньше, чем «max_connections» в postgresql, иначе pgpool отмечает DB как недоступный бэкэнд. И если у вас есть некоторые соединения DB, зарезервированные для использования администратором, вам нужно еще больше сократить количество подключений pgpool.

Итак, я говорю, что «max_connections» в формуле - это параметр, установленный в postgresql.conf. Установка «child_max_connections» на 100 в вышеприведенном комментарии означает, что соединение pgpool закрывается и возобновляется каждые 100 раз.

Смежные вопросы