Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 会话表中已有太多客户端出错_Laravel_Postgresql - Fatal编程技术网

Laravel 会话表中已有太多客户端出错

Laravel 会话表中已有太多客户端出错,laravel,postgresql,Laravel,Postgresql,我有一个高流量的网站,使用HAProxy for LoadBalancer,将我的Laravel应用程序放在3台服务器上,我已经为Redis和数据库设置了单独的服务器(我的数据库是Postgresql)。 因为我使用了负载平衡器,所以我将所有会话迁移到数据库中 今天我的网站出现了一个高峰,我的大多数用户都出现了500内部服务器错误。当需要检查他们的权限/身份验证时,他们经常会遇到此错误。当我检查日志文件时,我发现日志文件中有许多数据库异常,这是导致内部服务器错误的原因 [2020-01-15 1

我有一个高流量的网站,使用HAProxy for LoadBalancer,将我的Laravel应用程序放在3台服务器上,我已经为Redis和数据库设置了单独的服务器(我的数据库是Postgresql)。 因为我使用了负载平衡器,所以我将所有会话迁移到数据库中

今天我的网站出现了一个高峰,我的大多数用户都出现了
500内部服务器
错误。当需要检查他们的权限/身份验证时,他们经常会遇到此错误。当我检查日志文件时,我发现日志文件中有许多数据库异常,这是导致内部服务器错误的原因

[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)
我在互联网上搜索并找到了一些解决方案,有人说我应该在PostgreSQL中增加
max_connections
,有文章说应该在应用层解决这个问题。但是我使用了Laravel框架,我不知道该怎么做


有人能帮我吗?

正如建议的那样,有几种方法可以解决这个问题。如果要在数据库端解决此问题,可以:

  • 增加max_connections参数(这是一个短期解决方案)
  • 使用连接池,如pgpool或pgbounncer(还有其他连接池)。显然,如果您的应用程序在这样的环境中正常工作,那么需要测试这样的体系结构更改

您可以将会话存储移到redis。这将为特定于应用程序的应用程序释放数据库operations@PtrTon谢谢你的建议,Redis比PostgreSQL稳定吗?这不是稳定性的问题,而是读写这种频繁访问的数据的速度有多快。你当前的最大连接是什么?所有这些连接都用于什么(请参阅“pg_stat_activity”)@jjanes最大连接数的值为100,当我检查pg_stat_activity时,活动连接数小于30。我看不到超过30个连接