/** * Optimisation des tables spip_versions et spip_versions_fragments */ function optimiser_tables_revision() { foreach (array('spip_versions', 'spip_versions_fragments') as $table) { spip_log("debut d'optimisation de la table {$table}"); if (sql_optimize($table)) { spip_log("fin d'optimisation de la table {$table}"); } else { spip_log("Pas d'optimiseur necessaire pour {$table}"); } } }
function optimiser_base_une_table() { $tables = array(); $result = sql_showbase(); // on n'optimise qu'une seule table a chaque fois, // pour ne pas vautrer le systeme // lire http://dev.mysql.com/doc/refman/5.0/fr/optimize-table.html while ($row = sql_fetch($result)) $tables[] = array_shift($row); if ($tables) { $table_op = intval($GLOBALS['meta']['optimiser_table']+1) % sizeof($tables); ecrire_meta('optimiser_table', $table_op); $q = $tables[$table_op]; spip_log("debut d'optimisation de la table $q"); if (sql_optimize($q)) spip_log("fin d'optimisation de la table $q"); else spip_log("Pas d'optimiseur necessaire"); } }
/** * Archiver les visites d'articles * * @note * Cela peut prendre beaucoup de temps. * * La base de test avait (en 2014) 12.500.000 d'entrées depuis 2005. * Cet archivage réduit à 1.200.000 entrées en réduisant * par mois jusqu'à 2012 inclu et par an jusqu'à 2009 inclu. * * Cela prenait 8 minutes sur ma machine locale * (Intel Core i5-4258U CPU @ 2.40GHz × 4 avec disque SSD) * * @note * On peut suivre l'avancement dans le fichier de log * tail -f tmp/log/statistiques_archiver.log * * @note * On ne peut pas vraiment avec le code actuel de la fonction * appliquer les calculs sur l'ensemble d'un mois car cela * peut facilement surcharger la mémoire de php. * * Du coup, on applique par petit bouts d'abord. * * @uses statistiques_concatener_visites_entre_jours() * @uses statistiques_concatener_visites_par_mois() * @uses statistiques_concatener_visites_par_an() **/ function statistiques_archiver_visites_articles() { // Tenter de donner du temps au temps @set_time_limit(15 * 60); // 15mn $annee_par_mois = date('Y') - STATISTIQUES_ARCHIVER_PAR_MOIS; $annee_par_an = date('Y') - STATISTIQUES_ARCHIVER_PAR_AN; $annee_minimum = statistiques_concatener_annee_minimum(); if (!$annee_minimum) { return false; } if ($annee_minimum > $annee_par_mois) { statistiques_archiver_log("Il n'y a pas de statistiques assez anciennes pour concaténer par mois !"); } else { // en plusieurs temps pour éviter trop de mémoire ! statistiques_concatener_visites_entre_jours($annee_par_mois, 1, 10); statistiques_concatener_visites_entre_jours($annee_par_mois, 11, 20); statistiques_concatener_visites_entre_jours($annee_par_mois, 21, 31); // et on regroupe tout en 1 seul morceau. statistiques_concatener_visites_par_mois($annee_par_mois); } if ($annee_minimum > $annee_par_an) { statistiques_archiver_log("Il n'y a pas de statistiques assez anciennes pour concaténer par an !"); } else { // et les vieilles années, on regroupe par an directement. statistiques_concatener_visites_par_an($annee_par_an); } statistiques_archiver_log("* Optimiser la table spip_visites_articles après les travaux."); sql_optimize('spip_visites_articles'); }