vendredi 16 janvier 2015

Histogramme: comment les décrypter

Un histogramme sur une colonne peut être utile si cette colonne a une distribution non uniforme de ses valeurs; on parle alors de skew distribution. Jusqu'à la 12c, il existait deux types d'histogramme: les histogrammes de type fréquence et les histogrammes de type height-balanced. Les premiers, sorte de diagramme en bâton, sont précis, mais ils sont limités à 256 valeurs. Les seconds, se basant sur un algorithme d'identification de valeurs populaires,  permettent de traiter les autres cas, mais ils peuvent être amenés à être imprécis pour certains types de distribution. Lorsque cela se produit, soit on supprime l'histogramme, soit on le fake si les données ont une certaine stabilité dans le temps.

Mais, avant de mettre en défaut un histogramme, il est utile de pouvoir le décrypter ( ! ) afin de vérifier sa validité. En effet, la lecture d'un histogramme est parfois tout sauf une chose aisée. Afin de vous aider dans cette tâche, j'ai chargé dans Google Drive un fichier exemple ( /oracle/histogram/etude_histogram.sql ). Sur ce point, un grand merci à J.Lewis, comme d'habitude ...

Depuis la 12c, on peut désormais avoir 2048 valeurs dans un histogramme de type fréquence. De plus, deux nouveaux types d'histogramme sont apparus: les histogrammes de type top frequency et les histogrammes hybrides.  Les premiers sont très intéressants car ce sont des histogrammes de type fréquence qui regroupe les top-n valeurs d'une colonne, ce qui est souvent représentatif de la réalité ( penser à une distribution de Zipfian pour simuler ce genre de colonne ). Les seconds sont une amélioration des histogrammes de type height-balanced.

Si vous souhaitez avoir plus d'infos sur ce sujet et plus généralement sur les nouveautés de la 12c au niveau de l'optimiseur: /oracle/paris_oracle_meetup/The Query Optimizer in Oracle Database 12c - What's new ? ( written by C.Antognini ).

Jusqu'à maintenant, je vous ai parlé d'histogramme sur une colonne. Ce type d'outil reste valide tant que les valeurs des colonnes sont indépendantes les unes des autres. Mais quand cela n'est plus le cas, l'optimiseur ne peut plus estimer correctement la sélectivité d'une clause where comportant par exemple deux colonnes dépendantes l'une de l'autre. Pour pallier ce défaut, Oracle a introduit en 11g la notion d'extended statistics.

Oracle implémente cette notion en créant une colonne virtuelle correspondant à la concaténation des colonnes ciblées, puis calcule les statistiques sur la colonne virtuelle: on peut alors obtenir un histogramme sur plusieurs colonnes. La colonne virtuelle est définie via la fonction sys_op_combined_hash.

Enfin, pour finir, SVP, ne supprimer pas les histogrammes d'une base sans raison !


jeudi 8 janvier 2015

Liens invalides

Dernièrement, Free a interdit la lecture des répertoires sur les sites FTP perso à la demande de la CNIL. Par conséquent, seuls les liens sur un fichier fonctionnent désormais.

Pour les liens sur les répertoires, je les ai remplacés par un accès en mode public via google drive. Ils sont désormais au niveau des posts de mon compte Google+.

Désolé.