Feature: #25341 - Scheduler task to optimize database tables

See forge#25341


A scheduler task to run the OPTIMIZE TABLE command on selected database tables has been added. The OPTIMIZE TABLE command reorganizes the physical storage of table data and associated index data to reduce storage space and improve I/O efficiency when accessing the table. The exact changes made to each table depend on the storage engine used by that table. For more information see the MySQL manual.

The scheduler task is meant for the MySQL database system and only shows tables matching the MySQL storage engines MyISAM, InnoDB and ARCHIVE. Using this task with DBAL and other DBMS is not supported as the commands used are MySQL specific.


Optimizing tables is I/O intensive. On MySQL < 5.6.17 it also locks the tables for the whole time, which can severely impact the website while it is running. When considering whether or not to run optimize, consider the workload of transactions that your server will process as InnoDB tables do not suffer from fragmentation in the same way that MyISAM tables do.