]> git.mxchange.org Git - friendica.git/commitdiff
Periodically run an "optimize table" command for cache tables
authorMichael <heluecht@pirati.ca>
Tue, 4 Aug 2020 12:24:24 +0000 (12:24 +0000)
committerMichael <heluecht@pirati.ca>
Tue, 4 Aug 2020 12:24:24 +0000 (12:24 +0000)
src/Module/Admin/Site.php
src/Worker/Cron.php
src/Worker/CronJobs.php
static/settings.config.php
view/templates/admin/site.tpl
view/theme/frio/templates/admin/site.tpl

index 50566b349f285ffd4fbec9dcb87538693d438907..7cc17fa036bb639672cd0b4bc1e6635bf898ebfd 100644 (file)
@@ -173,8 +173,7 @@ class Site extends BaseAdmin
                $maxloadavg             = (!empty($_POST['maxloadavg'])             ? intval(trim($_POST['maxloadavg']))             : 20);
                $maxloadavg_frontend    = (!empty($_POST['maxloadavg_frontend'])    ? intval(trim($_POST['maxloadavg_frontend']))    : 50);
                $min_memory             = (!empty($_POST['min_memory'])             ? intval(trim($_POST['min_memory']))             : 0);
-               $optimize_max_tablesize = (!empty($_POST['optimize_max_tablesize']) ? intval(trim($_POST['optimize_max_tablesize'])) : 100);
-               $optimize_fragmentation = (!empty($_POST['optimize_fragmentation']) ? intval(trim($_POST['optimize_fragmentation'])) : 30);
+               $optimize_tables        = (!empty($_POST['optimize_tables'])        ? intval(trim($_POST['optimize_tables']))        : false);
                $contact_discovery      = (!empty($_POST['contact_discovery'])      ? intval(trim($_POST['contact_discovery']))      : Contact\Relation::DISCOVERY_NONE);
                $synchronize_directory  = (!empty($_POST['synchronize_directory'])  ? intval(trim($_POST['synchronize_directory']))  : false);
                $poco_requery_days      = (!empty($_POST['poco_requery_days'])      ? intval(trim($_POST['poco_requery_days']))      : 7);
@@ -301,8 +300,7 @@ class Site extends BaseAdmin
                DI::config()->set('system', 'maxloadavg'            , $maxloadavg);
                DI::config()->set('system', 'maxloadavg_frontend'   , $maxloadavg_frontend);
                DI::config()->set('system', 'min_memory'            , $min_memory);
-               DI::config()->set('system', 'optimize_max_tablesize', $optimize_max_tablesize);
-               DI::config()->set('system', 'optimize_fragmentation', $optimize_fragmentation);
+               DI::config()->set('system', 'optimize_tables'       , $optimize_tables);
                DI::config()->set('system', 'contact_discovery'     , $contact_discovery);
                DI::config()->set('system', 'synchronize_directory' , $synchronize_directory);
                DI::config()->set('system', 'poco_requery_days'     , $poco_requery_days);
@@ -657,8 +655,7 @@ class Site extends BaseAdmin
                        '$maxloadavg'             => ['maxloadavg', DI::l10n()->t('Maximum Load Average'), DI::config()->get('system', 'maxloadavg', 20), DI::l10n()->t('Maximum system load before delivery and poll processes are deferred - default %d.', 20)],
                        '$maxloadavg_frontend'    => ['maxloadavg_frontend', DI::l10n()->t('Maximum Load Average (Frontend)'), DI::config()->get('system', 'maxloadavg_frontend', 50), DI::l10n()->t('Maximum system load before the frontend quits service - default 50.')],
                        '$min_memory'             => ['min_memory', DI::l10n()->t('Minimal Memory'), DI::config()->get('system', 'min_memory', 0), DI::l10n()->t('Minimal free memory in MB for the worker. Needs access to /proc/meminfo - default 0 (deactivated).')],
-                       '$optimize_max_tablesize' => ['optimize_max_tablesize', DI::l10n()->t('Maximum table size for optimization'), $optimize_max_tablesize, DI::l10n()->t('Maximum table size (in MB) for the automatic optimization. Enter -1 to disable it.')],
-                       '$optimize_fragmentation' => ['optimize_fragmentation', DI::l10n()->t('Minimum level of fragmentation'), DI::config()->get('system', 'optimize_fragmentation', 30), DI::l10n()->t('Minimum fragmenation level to start the automatic optimization - default value is 30%.')],
+                       '$optimize_tables'        => ['optimize_tables', DI::l10n()->t('Periodically optimize tables'), DI::config()->get('system', 'optimize_tables', false), DI::l10n()->t('Periodically optimize tables like the cache and the workerqueue')],
 
                        '$contact_discovery'      => ['contact_discovery', DI::l10n()->t('Discover followers/followings from contacts'), DI::config()->get('system', 'contact_discovery'), DI::l10n()->t('If enabled, contacts are checked for their followers and following contacts.') . '<ul>' .
                                '<li>' . DI::l10n()->t('None - deactivated') . '</li>' .
index 4a49103e09efcc1fad8652d2a0bdfc773b6d9616..37d4d4b807894852b96fcdbfb1c3ee3c4415b0d2 100644 (file)
@@ -109,7 +109,7 @@ class Cron
                        DBA::delete('workerqueue', ['`done` AND `executed` < UTC_TIMESTAMP() - INTERVAL 1 HOUR']);
 
                        // Optimizing this table only last seconds
-                       if (DI::config()->get('system', 'optimize_workerqueue', false)) {
+                       if (DI::config()->get('system', 'optimize_tables')) {
                                DBA::e("OPTIMIZE TABLE `workerqueue`");
                        }
 
index 5b5c01acab0ea8a6f18278cd4ee81e43d2624e44..385109ae20cdd3b5fb36ddfdfc6e3d3872f1d15a 100644 (file)
@@ -193,46 +193,18 @@ class CronJobs
                // Delete the cached "parse_url" entries that are older than three month
                DBA::delete('parsed_url', ["`created` < NOW() - INTERVAL 3 MONTH"]);
 
-               // Maximum table size in megabyte
-               $max_tablesize = intval(DI::config()->get('system', 'optimize_max_tablesize')) * 1000000;
-               if ($max_tablesize == 0) {
-                       $max_tablesize = 100 * 1000000; // Default are 100 MB
-               }
-               if ($max_tablesize > 0) {
-                       // Minimum fragmentation level in percent
-                       $fragmentation_level = intval(DI::config()->get('system', 'optimize_fragmentation')) / 100;
-                       if ($fragmentation_level == 0) {
-                               $fragmentation_level = 0.3; // Default value is 30%
-                       }
-
-                       // Optimize some tables that need to be optimized
-                       $r = q("SHOW TABLE STATUS");
-                       foreach ($r as $table) {
-
-                               // Don't optimize tables that are too large
-                               if ($table["Data_length"] > $max_tablesize) {
-                                       continue;
-                               }
-
-                               // Don't optimize empty tables
-                               if ($table["Data_length"] == 0) {
-                                       continue;
-                               }
-
-                               // Calculate fragmentation
-                               $fragmentation = $table["Data_free"] / ($table["Data_length"] + $table["Index_length"]);
-
-                               Logger::log("Table " . $table["Name"] . " - Fragmentation level: " . round($fragmentation * 100, 2), Logger::DEBUG);
-
-                               // Don't optimize tables that needn't to be optimized
-                               if ($fragmentation < $fragmentation_level) {
-                                       continue;
-                               }
-
-                               // So optimize it
-                               Logger::log("Optimize Table " . $table["Name"], Logger::DEBUG);
-                               q("OPTIMIZE TABLE `%s`", DBA::escape($table["Name"]));
-                       }
+               if (DI::config()->get('system', 'optimize_tables')) {
+                       Logger::info('Optimize start');
+                       DBA::e("OPTIMIZE TABLE `auth_codes`");
+                       DBA::e("OPTIMIZE TABLE `cache`");
+                       DBA::e("OPTIMIZE TABLE `challenge`");
+                       DBA::e("OPTIMIZE TABLE `locks`");
+                       DBA::e("OPTIMIZE TABLE `oembed`");
+                       DBA::e("OPTIMIZE TABLE `parsed_url`");
+                       DBA::e("OPTIMIZE TABLE `profile_check`");
+                       DBA::e("OPTIMIZE TABLE `session`");
+                       DBA::e("OPTIMIZE TABLE `tokens`");
+                       Logger::info('Optimize finished');                      
                }
 
                DI::config()->set('system', 'cache_last_cleared', time());
index abfb1024e0b6167f0b6057ba59c5516fa051ee5f..19f47d2b8a36b86ccc4a5d28751599dbf9aef28f 100644 (file)
@@ -146,6 +146,10 @@ return [
                // in the user settings, this controls the maximum file
                // size of the upload file.
                'max_csv_file_size' => 30720,
+
+               // optimize_tables (Boolean)
+               // Periodically (once an hour) run an "optimize table" command for cache tables
+               'optimize_tables' => false,
        ],
 
        // Used in the admin settings to lock certain features
index ab97d8218d87746b1361a2c53a86261908d5919a..5c63970e9f3d4e1ff4efde930447e8e181e3bad9 100644 (file)
@@ -87,8 +87,6 @@
                {{include file="field_input.tpl" field=$proxyuser}}
                {{include file="field_input.tpl" field=$timeout}}
                {{include file="field_input.tpl" field=$maxloadavg_frontend}}
-               {{include file="field_input.tpl" field=$optimize_max_tablesize}}
-               {{include file="field_input.tpl" field=$optimize_fragmentation}}
                {{include file="field_input.tpl" field=$abandon_days}}
                {{include file="field_input.tpl" field=$temppath}}
                {{include file="field_checkbox.tpl" field=$suppress_tags}}
                {{include file="field_input.tpl" field=$dbclean_expire_days}}
                {{include file="field_input.tpl" field=$dbclean_unclaimed}}
                {{include file="field_input.tpl" field=$dbclean_expire_conv}}
+               {{include file="field_checkbox.tpl" field=$optimize_tables}}
                <div class="submit"><input type="submit" name="page_site" value="{{$submit}}"/></div>
 
                <h2>{{$worker_title}}</h2>
index c5a24ffd34b109db27e6f0605af9906c2974ba3b..0136b1cd44aab407cae023291441543bba71d133 100644 (file)
                                                {{include file="field_input.tpl" field=$proxyuser}}
                                                {{include file="field_input.tpl" field=$timeout}}
                                                {{include file="field_input.tpl" field=$maxloadavg_frontend}}
-                                               {{include file="field_input.tpl" field=$optimize_max_tablesize}}
-                                               {{include file="field_input.tpl" field=$optimize_fragmentation}}
                                                {{include file="field_input.tpl" field=$abandon_days}}
                                                {{include file="field_input.tpl" field=$temppath}}
                                                {{include file="field_checkbox.tpl" field=$suppress_tags}}
                                                {{include file="field_input.tpl" field=$dbclean_expire_days}}
                                                {{include file="field_input.tpl" field=$dbclean_unclaimed}}
                                                {{include file="field_input.tpl" field=$dbclean_expire_conv}}
+                                               {{include file="field_checkbox.tpl" field=$optimize_tables}}
                                        </div>
                                        <div class="panel-footer">
                                                <input type="submit" name="page_site" class="btn btn-primary" value="{{$submit}}"/>