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/