Symfony FATAL: sorry, too many clients already' in /vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnec

brother79

Новичок
FATAL: sorry, too many clients already' in /vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:43

Вот такая вот беда приключилось, немного истории:
Используется постгрес + монга, причём постгреса очень поминимуму, фактически одна соната с табличками бандла SonataPage
Есть очень много фоновых процессов на отдельном серваке, которые постоянно лопатят монгу, и иногда обращаются к паре табличек сонатовских, процессов до 1500 одновременных бывает, и они долгие, ну и на пике такая вот ошибка возникает.
Попробовал перегрузить сервер с фоновыми процессами(не тот на котором постгрес), сразу постгрес освободил соединения и остальные серваки заработали.

Мне не понятно, неужели доктрина открывает соединение и держит его открытым и потом они накапливаются и постгрес перестаёт реагировать? Или там админская сторона чтобы он отрубал процессы со временем по таймауту?

Кол-во открытых соединений в постгресе счас 300
 

fixxxer

К.О.
Партнер клуба
Еще может оказаться полезным pgbouncer, но вообще странно, что так много открытых соединений.
 

brother79

Новичок
У каждой базы есть максимальное кол-во одновременных подключений.
Я какбы понимаю, не первый год в програмировании. Вопрос в другом, ковырял доктрину, она соединение открывает по каждому пустяку даже без запроса к БД, просто при инициализации репозитория, или ещё хуже при некоторых настройках параметров - даже без репозитория, просто при старте, и оно висит открытым. А процессы долгие и их много а к постгресу они почти не лезут, или лезут крайне редко, а постгрес держит под них соединение вхолостую.
Вот как побороть эту болячку доктрины?
Еще может оказаться полезным pgbouncer, но вообще странно, что так много открытых соединений.
А за это спасибо, судя по описанию - то что нужно, буду пробовать.
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
У doctrine есть класс Connection, с методами close и connect. Видимо тебе нужно самостоятельно контроллировать этот момент. Открытие коннекта не дешевая операция, так-то.
Вообще разве на уровне php нельзя коннект кешировать, чтобы все скрипты использовали то же соединение?
PS http://php.net/manual/en/function.pg-pconnect.php - ну вот, собственно
PPS в доктрине же PDO драйвер, PDO::ATTR_PERSISTENT => true нужно передать.
 
Последнее редактирование:
Сверху