#ruby-on-rails #postgresql #pgbouncer
#ruby-on-rails #postgresql #pgbouncer
Вопрос:
У меня есть 2 сервера (A, B). Я запускаю приложение rails в A и db в B. На сервере B у меня запущены pgbouncer и postgresql.
Когда я запускаю 200 потоков в A, я получаю эту проблему, хотя я увеличил максимальное клиентское подключение pgbouncer до 500. И pgbouncer pool_mode является сеансом. Пул Postgresql равен 100.
Я также увеличил пул БД до 500 на сервере A.
Как я могу избежать этой проблемы и запустить 200 потоков без каких-либо проблем?
Позже я обновил код. Удалил pgbouncer и использовал postgresql напрямую. Создано 2 новых потока, которые выполняют работу с БД, а другие потоки больше не выполняют работу с БД. И во время выполнения потоков я отслеживал активные соединения. Он сохраняет 3 активными. Но в конце потоков у меня возникла эта проблема. Я показал статус пула соединений, используя ActiveRecord::Base.connection_pool.stat
{:size=>500, :connections=>4, :busy=>3, :dead=>0, :idle=>1, :waiting=>0, :checkout_timeout=>5}
rake aborted!
ActiveRecord::StatementInvalid: PG::UnableToSend: no connection to the server
Есть ли кто-нибудь, кто может помочь мне с этой проблемой?
Комментарии:
1. Что-нибудь в журналах PG?
2. 2020-10-30 07:57:45.808 UTC [15779] ЖУРНАЛ C-0x55f2c78d3520: saveatrain_production/saveatrain@13.94.118.240:35910 закрытие, потому что: запрос на закрытие клиента (возраст = 113 секунд) 2020-10-30 07:57:48.636 UTC [15779] Статистика ЖУРНАЛА: 690 xacts / s, 705 запросов / s, в 94591 B / s, из 232456 B /s, xact 913 us, запрос 870 us, ожидание 0 us 2020-10-30 07:57:50.990 UTC [15779] ЖУРНАЛ C-0x55f2c78d1ae0: saveatrain_production/saveatrain@13.94.118.240:59996 закрытие, потому что: запрос на закрытие клиента (возраст = 782 года)
Ответ №1:
Я объединил экземпляр базы данных и экземпляр приложения. Это работает. Я все еще не уверен, является ли это проблемой версии db или проблемой удаленного доступа postgresql. На мой взгляд, это проблема удаленного доступа.