В 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
, либо — обновить тип инстанса сервера БД на больший.
Либо, конечно, рефакторить приложение, и уменьшать кол-во долгих запросов.