Digora blog

Compressez vos données Oracle... sans changer votre hardware !

26/11/2011
Données

La taille de vos base augmente de façon inquiétante. La taille de vos sauvegardes de bases Oracle explose. Vos liens DataGuard entre sites distants saturent... Faut-il acheter du hardware complémentaire ?

Oracle incorpore dans sa base  Enterprise Edition une option qui vaut le détour : ADVANCED COMPRESSION. Cette option apporte 4 fonctionnalités fort utiles :

  1. Compression des données relationnelles
  2. Compression des données non structurées
  3. Compression des backups
  4. Compression réseau

Reprenons ces fonctionnalités une par une.

1. Compression des données relationnelles

Dans la version 9iR2 EE, Oracle a introduit une compression des données stockées dans les blocs Oracle. Elle a été ensuite nommée BASIC (en opposition avec le mode OLTP introduit dans la version 11g). Cette fonctionnalité a apporté de grands gains d'espace pour les bases Datawarehouse. Le mode  BASIC, toujours disponible sans option  dans l'Edition Enterprise, comporte quelques limites :

  • seules peuvent être compressées des données chargées en "Bulk Load", ex. SQL Loader en mode Direct, INSERT avec le hint APPEND
  • les lignes  insérées avec un INSERT normal ou modifiées avec un UPDATE ne pouvaient pas être compressées
  • les lignes  modifiées sont "décompressées"
La version 11g a apporté des  progrès considérables avec l'option ADVANCED COMPRESSION (et donc le mode de compression OLTP) :
  • les lignes insérées  avec un INSERT normal ou modifiées avec un UPDATE sont désormais également compressées
  • amélioration du temps d'exécution des requêtes (moins d'I/O, Buffer Cache mieux utilisé)
  • diminution du volume par un facteur 2 à 3

Comment cela fonctionne-t-il ?

Voici les points importants de la compression en mode OLTP :
  • les lignes sont toujours compressées au niveau du  bloc
  • le mode est spécifié au niveau de la table ou de la partition
  • c'est complètement transparent pour les applications
  • un nouvel algorithme (mode "batch") a été mis en oeuvre
  • pas d'incidence pour les Reads (sauf même des  améliorations)
Ce schéma va permettre de comprendre :
 
Schématisation de la compression en mode OLTP
 
Quelques explications (pour les passionnés de technique) :
  • Etat 1 (Empty Block) : le bloc est vide
  • Etat 2 (Initially Uncompressed Block) : tous les INSERT (ou UPDATE) effectués dans ce bloc ont fait dépasser le seuil de remplissage autorisé (en relation avec PCTFREE) et le dernier INSERT (ou UPDATE) déclenche la compression du bloc
  • Etat 3 (Compressed Block) : les données ont été compressées, il y a à nouveau de la place dans le bloc pour des INSERT (ou des UPDATE)
  • Etat 4 (Partially Compressed Block) :  les nouveaux INSERT(ou UPDATE)  effectués dans ce bloc ont à nouveau  fait dépasser le seuil de remplissage autorisé (en relation avec PCTFREE) et le dernier INSERT (ou UPDATE) déclenche à nouveau la compression du bloc
  • Etat 5 (Compressed Block) : les données ont été à nouveau compressées, il y a à nouveau de la place dans le bloc pour des INSERT  (ou des UPDATE)
Il s'agit d'un algorithme simple, breveté, minimisant le surcoût en ressource et augmentant la compression. Des INSERT et UPDATE individuels ne déclenchent pas de recompression à chaque fois. Le coût de compression est amorti sur plusieurs ordres DML.
La compression au niveau bloc (local) convient aux nombreux changement de données en environnement OLTP.
Si vous souhaitez des taux de compression plus élevé, tournez vous vers la compression HCC liée à EXADATA ou aux bais PILLAR et SUN ZFS (voir notre article récent sur notre Blog).
Un peu de syntaxe :
-- OLTP Table Compression Syntax:
CREATE TABLE emp (
  emp_id NUMBER
, first_name VARCHAR2(128)
, last_name VARCHAR2(128)
) COMPRESS FOR OLTP;
-- Direct Load Compression Syntax (default):
CREATE TABLE emp (
  emp_id NUMBER
, first_name VARCHAR2(128)
, last_name VARCHAR2(128)
) COMPRESS [BASIC];

La vue DBA_TABLES précise dans les colonnes COMPRESS et COMPRESS_FOR l'état de compression d'une table.

Estimation du gain lié à la compression ?

Un PACKAGE fourni par Oracle permet de calculer le taux de compression possible sur une table ou un ensemble de tables (utilisable sur des bases 9iR2, 10g et 11g).
Ce PACKAGE affiche également le taux de compression actuel pour des tables compressées (11g seulement).
 
Taux de compression pour des tables compressées

 

Cet outil est téléchargeable : Compression Advisor Voici quelques exemples de bénéfices possibles avec cette option :

Exemple 1 : Oracle EBS Exemple 2 : SAP

En résumé : un facteur de compression de 2 à 4 !!!! Voilà de quoi soulager les baies SAN saturées... 2. Compression des données non structurées Oracle fournit également des fonctionnalités appréciables pour la compression de données don structurées :

  • Déduplication de BLOB (une seule image sur disque pour des fichiers dupliqués : gain d’espace et de Write/Copy; pas de ralentissement sur les lectures , et améliorations même souvent)
  • Compression du contenu de BLOB (compression couramment constatée : facteur 2 à 3)
  • Fonctionnalités appropriées pour la Gestion de Contenu, les Mails et les applications d'archivage
Voici le schéma de principe de la déduplication de BLOB (les BLOB identiques ne sont stockés qu'une seule fois)  :
 Schéma du principe de déduplication de BLOB

3. Compression des backups

Oracle ADVANCED COMPRESSION impacte les Backups sous deux aspects : a. Exports DATA PUMP

  • La compression des méta-données est disponibles depuis Oracle 10g
  • La compression des données est disponible  depuis Oracle 11g
  • Pas besoin de décompresser pour effectuer un import
  • Gain d’espace : réduction de près de 75% d’espace
  • Utilisation transparente pour DataPump

b. Sauvegardes RMAN

  • Réduction drastique des volumes de sauvegardes
  • Ne nécessite pas de décompression avant de lancer le RESTORE
  • 3 niveaux de compressions

-LOW (11.2) : le plus rapide, le moins gourmant en CPU -MEDIUM (11.1) : équilibre entre consommation de CPU et taux de compression -HIGH (11.2) : le plus efficace, consommation de CPU plus importante

4. Compression réseau Oracle ADVANCED COMPRESSION impacte l'utilisation Réseau comme suit :

  • Compression du traffic réseau entre une base primaire et une base DataGuard (flux Redo Log)
  • Réseaux à faible bande passante (
  • Réseaux à large bande passante (>100 Mbps) : la compression ne réduira pas le temps de transmission; elle réduira la consommation réseau (jusqu’à 35%)

En résumé : l'option ADVANCED COMPRESSION apporte de nombreuses fonctionnalité qui peuvent être fort utiles dans certains contextes.