Performance optimization in cron
This commit is contained in:
14
chat.php
14
chat.php
@ -3424,6 +3424,7 @@ function cron(){
|
||||
if(get_setting('nextcron')>$time){
|
||||
return;
|
||||
}
|
||||
update_setting('nextcron', $time+10);
|
||||
// delete old sessions
|
||||
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'sessions WHERE (status<=2 AND lastpost<(?-60*(SELECT value FROM ' . PREFIX . "settings WHERE setting='guestexpire'))) OR (status>2 AND lastpost<(?-60*(SELECT value FROM " . PREFIX . "settings WHERE setting='memberexpire')));");
|
||||
$stmt->execute([$time, $time]);
|
||||
@ -3437,9 +3438,17 @@ function cron(){
|
||||
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'messages WHERE id IN (SELECT * FROM (SELECT id FROM ' . PREFIX . 'messages WHERE postdate<(?-60*(SELECT value FROM ' . PREFIX . "settings WHERE setting='messageexpire'))) AS t);");
|
||||
$stmt->execute([$time]);
|
||||
// delete expired ignored people
|
||||
$db->exec('DELETE FROM ' . PREFIX . 'ignored WHERE ign NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions UNION SELECT nickname FROM ' . PREFIX . 'members UNION SELECT poster FROM ' . PREFIX . 'messages) OR ignby NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions UNION SELECT nickname FROM ' . PREFIX . 'members UNION SELECT poster FROM ' . PREFIX . 'messages);');
|
||||
$result=$db->query('SELECT id FROM ' . PREFIX . 'ignored WHERE ign NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions UNION SELECT nickname FROM ' . PREFIX . 'members UNION SELECT poster FROM ' . PREFIX . 'messages) OR ignby NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions UNION SELECT nickname FROM ' . PREFIX . 'members UNION SELECT poster FROM ' . PREFIX . 'messages);');
|
||||
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'ignored WHERE id=?;');
|
||||
while($tmp=$result->fetch(PDO::FETCH_NUM)){
|
||||
$stmt->execute($tmp);
|
||||
}
|
||||
// delete files that do not belong to any message
|
||||
$db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);');
|
||||
$result=$db->query('SELECT id FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);');
|
||||
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'files WHERE id=?;');
|
||||
while($tmp=$result->fetch(PDO::FETCH_NUM)){
|
||||
$stmt->execute($tmp);
|
||||
}
|
||||
// delete old notes
|
||||
$limit=get_setting('numnotes');
|
||||
$db->exec('DELETE FROM ' . PREFIX . 'notes WHERE type!=2 AND id NOT IN (SELECT * FROM ( (SELECT id FROM ' . PREFIX . "notes WHERE type=0 ORDER BY id DESC LIMIT $limit) UNION (SELECT id FROM " . PREFIX . "notes WHERE type=1 ORDER BY id DESC LIMIT $limit) ) AS t);");
|
||||
@ -3448,7 +3457,6 @@ function cron(){
|
||||
while($tmp=$result->fetch(PDO::FETCH_NUM)){
|
||||
$stmt->execute([$tmp[0], $tmp[0]]);
|
||||
}
|
||||
update_setting('nextcron', $time+10);
|
||||
}
|
||||
|
||||
function destroy_chat($C){
|
||||
|
Reference in New Issue
Block a user