Le Post Infeeny

Les articles des consultants et experts Infeeny

[SQL] Storing Columnstore Indexes

Speaker : Katen Delaney – Niveau 300

Il s’agit d’une session montrant le mécanisme du « columStore Index » permettant d’améliorer considérablement les performances de nos tables « SQL Server ».

Il s’agit d’un nouveau type d’index dans lequel les colonnes sont séparées en segment. Les données sont « read-only » C’est-à-dire qu’à chaque ajout de données, l’index doit être supprimé puis reconstruit On peut néanmoins utiliser le « switch » de partitions pour ajouter de nouvelles données sans reconstruire notre index.

Derrière, il s’agit du moteur « xVelocity » déjà présent dans « PowerPivot ».

Les recommandations pour créer ce type d’index

  • Beaucoup de mémoires (dépend du nombre de colonnes et  non du nombre de lignes)
  • Création en 3 étapes :
    • Création de la table
    • Chargement de la table
    • Création de l’index « columnStore »

Les « columnStore » index ne sont pas compatible avec les vues indexées, ils ne peuvent pas être « CLUSTER ». On ne peut pas appliquer de compression de données. Néanmoins, on peut sauvegarder et restaurer les tables, faire du « mirroring », du « log Shipping ».

Première démonstration de la puissance de cet index. On compare les temps de réponses sur une table de 30 millions de lignes. On peut également voir que le nombre de pages utilisé est très inférieur (46000 contre 700000).

On rentre ensuite en détail dans l’architecture des tables et des « columnStore » indexes sous SQL Server. Toutes les colonnes d’une ligne sont regroupées dans un « RowGroup »

Deuxième démonstration avec la création d’un « clustered » index et d’un « columnStore » index afin montrer les notions définies précédemment (le nombre de segments crée, etc.)

Les colonnes contenant cet index sont encodées afin de compresser les données. On trouve 2 types d’encodage :

  • Dictionnary Encoding
  • Value Encoding

L’encodage « Dictionnary » convertit les différentes valeurs en une séquence de nombres.

L’encodage « Value » ne prend en compte que le min et le max sur une plage de valeurs. N’existe que lorsqu’il y a trop valeurs distinctes.

Troisième démonstration avec l’utilisation des vues « sys.allocations_units » et « sys.partitions » afin de comprendre le stockage dans « SQL Server » (le nombre de pages, le nombre de partitions, etc.)

La vue « sys.column_store_segments » permet d’obtenir de nombreuses informations sur les « ColumnStore » indexes crées.

  • La taille
  • Le type d’encodage
  • Le min et le max des valeurs du segment

En bref, une session permettant de mieux comprendre ce qui se cache derrière le « columnStore » index.

Julien

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :