If scheduled course backups are enabled, cron.php calls schedule_backup_cron() whenever it runs. Line 36 of backup/backup_scheduled.php is
$numofrec = count_records_select ("backup_log","time > $timeafter");
This runs a full scan on mdl_backup_log, which can be a very large table depending on your site's log-retention policy. For example, we have cron.php scheduled to run every 5 minutes, and ~65,000 rows are read, simply to find out whether a backup task is currently running. The query takes around 4 seconds to complete. A workaround is to add an index to the table.
ALTER TABLE mdl_backup_log ADD INDEX (time);
This avoids the full table scan, and the query now completes in less than one hundredth of a second at our site. The drawback is that mdl_backup_log.MYI is now almost as big as mdl_backup_log.MYD I can't see any way of working around this issue in the PHP code.
|Fix Version/s||1.9 [ 10190 ]|
|Workflow||jira [ 33011 ]||MDL Workflow [ 45257 ]|
|Workflow||MDL Workflow [ 45257 ]||MDL Full Workflow [ 73606 ]|
|Assignee||Eloy Lafuente (stronk7) [ stronk7 ]|
|Status||Open [ 1 ]||Closed [ 6 ]|
|Resolution||Won't Fix [ 2 ]|