A.L.E.C wrote:
> Ondřej Žára wrote:
>   
>> Are you using Debian? Debian doesn't use the session GC in PHP - instead,
>> it cleans sessions in a cronjob. To enable PHP GC in Roundcube, one must
>> add (to main.inc.php) these lines:
>>
>> ini_set('session.gc_probability', 5);
>> ini_set('session.gc_divisor', 100);
>>
>> Values '5' and '100' were chosen experimentaly by me, use your own if you
>> want :)
>>   
>>     
>
> Someone should add above info to installation manual.
>
> By the way, reading rcube_sess_gc() I found an improvement possibility. 
> Function could be simpler and speed increased if we'll create index on 
> cache.session_id column with "ON DELETE CASCADE" reference, but it needs 
> innodb in mysql (foreign keys not supported by myisam tables), and 
> triggers in sqlite (foreign keys not supported at all).
>   
Another solution would be to get rid of the initial SELECT query and IN 
(... ) clauses and do one DELETE query with a JOIN between "session" and 
"cache" and second DELETE just for session. Both DELETEs would just have 
a now()-changed > $maxlifetime WHERE clause. now() is constant, so it 
may be better to write expression like now()-$maxlifetime > changed. If 
there is an index on changed column, the search would be very quick.
This approach has a potential of non atomic commit if cache entry is 
created between the two DELETEs. So it should be wrapped into a transaction.

Another approach for MySQL is multiple table DELETE.
http://dev.mysql.com/doc/refman/5.1/en/delete.html
However, there are no such thing in SQLite or PostgreSQL.

-- 
Regards,
Dennis P. Nikolaenko

_______________________________________________
List info: http://lists.roundcube.net/dev/

Reply via email to