用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1959|回复: 2
收起左侧

[版本 3.x] 关于ci 3.0 session存储在数据库的问题

[复制链接]
发表于 2015-7-22 12:30:10 | 显示全部楼层 |阅读模式
发现在3.0的时候session存储在数据的时候,分析慢查询日志发现如下sql,执行时间很慢长达20s;
SELECT GET_LOCK('6dff3c4785b674042ff5488817756aa4d0340f60', 300) AS ci_session_lock;

这种问题不是必然出现 如今没有发现为什么会这样 求大神告知 ,session使用配置如下
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
发表于 2015-7-31 12:44:37 | 显示全部楼层
看不出来为什么,信息太少了,还是要看出现慢查询的频率,如果频率比较高才是有问题
 楼主| 发表于 2015-8-10 21:08:55 | 显示全部楼层
ahcheqiu 发表于 2015-7-31 12:44
看不出来为什么,信息太少了,还是要看出现慢查询的频率,如果频率比较高才是有问题 ...

SELECT GET_LOCK('6dff3c4785b674042ff5488817756aa4d0340f60', 300) AS ci_session_lock;当session存在数据库的时候每次读取session的时候,为了保持同步都会加上一个lock  加锁是通过数据库里面的 get_lock 方法来的 当这个脚本执行完之后那么就会释放这个锁  保证在并发的时候session的一致性;而为什么会有这个慢查询就是a脚本因为数据的lock没有释放 当这个时候就会出现b脚本在执行的时候就获取不到资源 以至于300秒延迟 ;问题就是不明白什么时候会出现lock没有释放的情况。。。。

本版积分规则