Merge pull request #2426 from annando/1604-cron-optimize

Don't optimize the tables when the maximum size is lower than zero
This commit is contained in:
Tobias Diekershoff 2016-04-01 21:26:12 +02:00
commit d4fd01e25e

View file

@ -335,35 +335,37 @@ function cron_clear_cache(&$a) {
if ($max_tablesize == 0) if ($max_tablesize == 0)
$max_tablesize = 100 * 1000000; // Default are 100 MB $max_tablesize = 100 * 1000000; // Default are 100 MB
// Minimum fragmentation level in percent if ($max_tablesize > 0) {
$fragmentation_level = intval(get_config('system','optimize_fragmentation')) / 100; // Minimum fragmentation level in percent
if ($fragmentation_level == 0) $fragmentation_level = intval(get_config('system','optimize_fragmentation')) / 100;
$fragmentation_level = 0.3; // Default value is 30% if ($fragmentation_level == 0)
$fragmentation_level = 0.3; // Default value is 30%
// Optimize some tables that need to be optimized // Optimize some tables that need to be optimized
$r = q("SHOW TABLE STATUS"); $r = q("SHOW TABLE STATUS");
foreach($r as $table) { foreach($r as $table) {
// Don't optimize tables that are too large // Don't optimize tables that are too large
if ($table["Data_length"] > $max_tablesize) if ($table["Data_length"] > $max_tablesize)
continue; continue;
// Don't optimize empty tables // Don't optimize empty tables
if ($table["Data_length"] == 0) if ($table["Data_length"] == 0)
continue; continue;
// Calculate fragmentation // Calculate fragmentation
$fragmentation = $table["Data_free"] / ($table["Data_length"] + $table["Index_length"]); $fragmentation = $table["Data_free"] / ($table["Data_length"] + $table["Index_length"]);
logger("Table ".$table["Name"]." - Fragmentation level: ".round($fragmentation * 100, 2), LOGGER_DEBUG); logger("Table ".$table["Name"]." - Fragmentation level: ".round($fragmentation * 100, 2), LOGGER_DEBUG);
// Don't optimize tables that needn't to be optimized // Don't optimize tables that needn't to be optimized
if ($fragmentation < $fragmentation_level) if ($fragmentation < $fragmentation_level)
continue; continue;
// So optimize it // So optimize it
logger("Optimize Table ".$table["Name"], LOGGER_DEBUG); logger("Optimize Table ".$table["Name"], LOGGER_DEBUG);
q("OPTIMIZE TABLE `%s`", dbesc($table["Name"])); q("OPTIMIZE TABLE `%s`", dbesc($table["Name"]));
}
} }
set_config('system','cache_last_cleared', time()); set_config('system','cache_last_cleared', time());