AWS RDS: PDOException: SQLSTATE[08004] [1040] Too many connections

Автор: | 26/12/2018

В Sentry начали сыпаться ошибки вида:

PDOException: SQLSTATE[08004] [1040] Too many connections in /data/projects/project/vendor/yiisoft/yii2/db/Connection.php:687
Stack trace:
#0 /data/projects/project/vendor/yiisoft/yii2/db/Connection.php(687): PDO->__construct(‘mysql:host=stag…’, ‘user’, ‘pass’, NULL)

Для всех инстансов RDS MariaDB максимальное кол-во подключений считается по формуле {DBInstanceClassMemory/12582880}.

Т.е. в нашем случае это тип db.m4.xlarge с 16ГБ памяти, следовательно:

[simterm]

$ echo "(16*1024*1024*1024)/12582880" | bc
1365

[/simterm]

Для указания значения лимита используется переменная max_connections:

Проверяем значение напрямую на сервере:

[simterm]

MariaDB [(none)]> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1320  |
+-----------------+-------+

[/simterm]

Ну – почти 1365. На 1320 оно и начинает падать.

И решения ошибки здесь два: либо вручную изменить значение для max_connections, либо – обновить тип инстанса сервера БД на больший.

Либо, конечно, рефакторить приложение, и уменьшать кол-во долгих запросов.