Ошибка слишком многих клиентов для сеансовой таблицы - PullRequest
1 голос
/ 15 января 2020

У меня есть веб-сайт с высоким трафиком c, я использую HAProxy для LoadBalancer и поместил свое приложение Laravel на 3 сервера, и я настроил отдельный сервер для Redis и базы данных (моя база данных Postgresql). И поскольку я использовал балансировщик нагрузки, я перенес все сеансы в базу данных.

Сегодня у меня был пик на моем сайте, и большинство моих пользователей получили ошибку 500 internal server. Они часто получают эту ошибку, когда необходимо проверить их разрешение / аутентификацию. Когда я проверил файл журнала, я обнаружил, что в файле журнала есть много исключений базы данных, что и стало причиной внутренней ошибки сервера.

[2020-01-15 14:14:21] producton.ERROR: SQLSTATE[08006] [7] FATAL:  sorry, too many clients already (SQL: select * from "sessions" where "id" = blahblahblah limit 1) {"exception":"[object] (Illuminate\\Database\\QueryException(code: 7): SQLSTATE[08006] [7] FATAL:  sorry, too many clients already (SQL: select * from \"sessions\" where \"id\" = blahblahblah limit 1) at /home/site/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664, Doctrine\\DBAL\\Driver\\PDOException(code: 7): SQLSTATE[08006] [7] FATAL:  sorry, too many clients already at /home/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:31, PDOException(code: 7): SQLSTATE[08006] [7] FATAL:  sorry, too many clients already at /home/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:27)

Я искал по inte rnet и нашел какое-то решение Некоторые люди говорят, что я должен увеличить max_connections в PostgreSQL, некоторые люди говорят, что вы должны решить эту проблему на прикладном уровне. но я использовал Laravel framework и не знаю, что мне делать.

кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 16 января 2020

Как предлагается, есть несколько способов решения этой проблемы. Если вы хотите решить эту проблему на стороне базы данных, вы можете:

  • Увеличить параметр max_connections (это кратковременное решение)
  • Использовать пул соединений, например, pgpool или pgbounncer ( есть и другие). Очевидно, что такое архитектурное изменение необходимо проверить, если ваше приложение работает правильно в такой среде.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...