/**
 * 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}");
        }
    }
}
Ejemplo n.º 2
0
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');
}