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.