Table de test : description

Note 2022 : il faudra que je crée une table plus volumineuse pour faire ce type de tests avec au moins 2 ou 3 millions de rangs, mais en 2010 les disques étaient plus petits, plus chers et nettement moins rapides qu'un SSD moderne. 
Pour de très gros tests (par exemple ClickHouse) je dispose d'une bonne grosse table de plus de 600 millions de rangs (#200Go sur disque).

Afin de "tester" un peu le fonctionnement des bases de données avec une table un peu "lourde" qui oblige le moteur à "sortir de ses caches". Le cache des données doit être positionné à une valeur de l'ordre de 256 Mo. J'utilise une table statistique de l'activité des machines virtuelles. Cette table comporte environ 300 000 lignes et est donc très insuffisante en volume.

create table xen_stat_v2 
(   DATEC         varchar(10), 
    HEUREC        varchar(5), 
    SERVEUR       varchar(16), 
    DOMNOM        varchar(16), 
    DELTACPU      decimal, 
    DELTARX       decimal, 
    DELTATX       decimal, 
    CPUPCT        decimal, 
    NBSECR        decimal, 
    NBSECW        decimal 
)

La syntaxe du "CREATE TABLE" est à adapter légèrement selon la BDD cible.

Cette table comporte, outre l'heure (HEUREC au format HH:MM), une colonne "DATEC" au format AAAAMMJJLa procédure de "gonflage" consiste donc à :

  • Calculer la différence entre les dates (AAAAMMJJ) mini et maxi sur la table permanente
  • Créer une nouvelle table de travail avec une date = (date originale) - différence calculée en (1) par un select sur la table originale.
  • Insérer cette nouvelle table dans la table originale
  • Et on recommence autant de fois qu'il faut pour dépasser les 13 millions de lignes. Là aussi la syntaxe est à adapter selon la base cible ...

Les opérations mesurées ensuite sont : 
La création de deux index : 
create index xen_stat_v2_i1 on xen_stat_v2 (DOMNOM, DATEC, HEUREC) 
create index xen_stat_v2_i2 on xen_stat_v2 (DATEC, DOMNOM, HEUREC) 
Le calcul des statistiques sur cette table : 
Lancement de quelques "select" donnant des totaux avec un group by / order by :

select count(*) 
    from xen_stat_v2

select DOMNOM,count(*) 
    from xen_stat_v2 
group by DOMNOM 
order by DOMNOM

select DOMNOM,SERVEUR,count(*) 
    from xen_stat_v2 
group by DOMNOM,SERVEUR 
order by DOMNOM,SERVEUR

Ces quelques opérations donnent simplement un petit avant-goût de la performance globale.