суть не во времени, а избыточных запросах на обновление
...
707 Query SELECT o.* FROM punbb_online AS o WHERE o.logged<1302072185
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=4400
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=77
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=246
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=3583
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=4808
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=4024
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=3841
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=6393
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=3753
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=1170
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=4128
707 Query UPDATE punbb_online SET idle=1 WHERE user_id=4743
707 Query SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.num_posts, f.last_post, f.last_post_id, f.last_poster FROM punbb_categories AS c INNER JOIN punbb_forums AS f ON c.id=f.cat_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=2) WHERE fp.read_forum IS NULL OR fp.read_forum=1 ORDER BY c.disp_position, c.id, f.disp_position
707 Query SELECT COUNT(u.id) - 1 FROM punbb_users AS u WHERE u.group_id != 0
707 Query SELECT u.id, u.username FROM punbb_users AS u WHERE u.group_id != 0 ORDER BY u.registered DESC LIMIT 1
707 Query SELECT SUM(f.num_topics), SUM(f.num_posts) FROM punbb_forums AS f
707 Query SELECT o.user_id, o.ident FROM punbb_online AS o WHERE o.idle=0 ORDER BY o.ident
707 Quit
110406 13:48:06 708 Connect price@localhost on price
708 Query SET NAMES 'utf8'
...
708 Query SELECT o.* FROM punbb_online AS o WHERE o.logged<1302072186
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=4400
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=77
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=246
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=3583
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=4808
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=4024
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=3841
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=6393
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=3753
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=1170
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=4128
708 Query UPDATE punbb_online SET idle=1 WHERE user_id=4743
708 Query SELECT t.id AS tid, t.poster, t.subject, t.first_post_id, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.closed, t.sticky, t.forum_id, f.forum_name, (SELECT COUNT(p.id) FROM punbb_posts AS p WHERE p.poster_id=6503 AND p.topic_id=t.id) AS has_posted FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.last_post>1302027854 AND t.moved_to IS NULL ORDER BY t.last_post DESC
708 Quit
...
если было заменено в functions.php
- if ($cur_user['idle'] != '0')
+ if ($cur_user['logged'] < ($now - $forum_config['o_timeout_visit']))
то, даже особо не разбираясь в том как все работает, думаю не лишним поправить ниже
else
{
$query = array(
'UPDATE' => 'online',
'SET' => 'idle=1',
'WHERE' => 'user_id='.$cur_user['user_id']
);
на
else if ($cur_user['idle'] != '1')
{
$query = array(
'UPDATE' => 'online',
'SET' => 'idle=1',
'WHERE' => 'user_id='.$cur_user['user_id']
);