diff --git a/include/class.cron.php b/include/class.cron.php index 3aa0357c198ce61e25a22dae6bc9ea982954877e..390ff0769117001d0714cd9f9874da74ada59b90 100644 --- a/include/class.cron.php +++ b/include/class.cron.php @@ -32,7 +32,9 @@ class Cron { function PurgeLogs() { global $ost; - if($ost) $ost->purgeLogs(); + // Once a day on a 5-minute cron + if (rand(1,300) == 42) + if($ost) $ost->purgeLogs(); } function PurgeDrafts() { @@ -45,6 +47,47 @@ class Cron { AttachmentFile::deleteOrphans(); } + function MaybeOptimizeTables() { + // Once a week on a 5-minute cron + $chance = rand(1,2000); + switch ($chance) { + case 42: + @db_query('OPTIMIZE TABLE '.TICKET_LOCK_TABLE); + break; + case 242: + @db_query('OPTIMIZE TABLE '.SYSLOG_TABLE); + break; + case 442: + @db_query('OPTIMIZE TABLE '.DRAFT_TABLE); + break; + + // Start optimizing core ticket tables when we have an archiving + // system available + case 142: + #@db_query('OPTIMIZE TABLE '.TICKET_TABLE); + break; + case 542: + #@db_query('OPTIMIZE TABLE '.FORM_ENTRY_TABLE); + break; + case 642: + #@db_query('OPTIMIZE TABLE '.FORM_ANSWER_TABLE); + break; + case 342: + #@db_query('OPTIMIZE TABLE '.FILE_TABLE); + # XXX: Please do not add an OPTIMIZE for the file_chunk table! + break; + + // Start optimizing user tables when we have a user directory + // sporting deletes + case 742: + #@db_query('OPTIMIZE TABLE '.USER_TABLE); + break; + case 842: + #@db_query('OPTIMIZE TABLE '.USER_EMAIL_TABLE); + break; + } + } + function run(){ //called by outside cron NOT autocron global $ost; if (!$ost || $ost->isUpgradePending()) @@ -55,6 +98,7 @@ class Cron { self::PurgeLogs(); self::CleanOrphanedFiles(); self::PurgeDrafts(); + self::MaybeOptimizeTables(); } } ?> diff --git a/include/class.lock.php b/include/class.lock.php index bbf53b5498451c8ab6e3660282898fa3f4318eb4..d6bcbad9dc66105803fbb49a267252d068423242 100644 --- a/include/class.lock.php +++ b/include/class.lock.php @@ -147,11 +147,10 @@ class TicketLock { return db_query($sql); } - //Called via cron + //Called via cron function cleanup() { //Cleanup any expired locks. db_query('DELETE FROM '.TICKET_LOCK_TABLE.' WHERE expire<NOW()'); - @db_query('OPTIMIZE TABLE '.TICKET_LOCK_TABLE); } } ?>