使用DB会话驱动程序运行laravel 5.4。随机我有数千个
update `sessions` set `payload` where id ....
通过mysql查看进程列表时。
似乎Laravel决定突然更新大量会话,从而导致整个数据库变得无响应(数据库在专用服务器上运行),并且最大连接数很快就被填满。我的会话寿命很长(因为我不想注销用户),因此会话表很大。
我试图将彩票的数量限制为0、100,以防造成问题,但仍无济于事。
有什么想法可能导致这种情况/我可以尝试什么?
sessions表是INNODB,ID和user_id中的索引
答案 0 :(得分:0)
上周我遇到了同样的问题。
您之所以大吃一惊,是因为您真的不知道发生了什么,甚至更糟:是什么引起了这个问题。
我使用数据库会话驱动器已经快两年了,这种情况以前从未发生过。
解决方案是将会话驱动器更改为REDIS。
在config/session.php
中,更改连接键:
'connection' => 'session'
在config/database.php
中,在redis条目上添加以下行:
'redis' => [
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
'session' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
],
],
再添加一个条目“会话”的原因是:
php artisan cache:clear
所有会话都将被清除,不仅是缓存本身。
因此,为避免这种情况,只需添加此新条目即可。
您可以在此处找到更多信息: