Structure du magasin de colonnes
Les données du magasin de colonnes sont physiquement stockées dans un ou plusieurs segments (unités d'allocation LOB régulières) par colonne, et peuvent également être partitionnées de la manière habituelle. Chaque segment contient environ un million de lignes de valeurs hautement compressées ou de références de valeurs (plusieurs techniques de compression sont disponibles). Une référence de valeur renvoie à une entrée dans l'un des deux dictionnaires de hachage .
Les dictionnaires sont épinglés en mémoire pendant l'exécution de la requête, les ID de valeur de données du segment étant consultés dans le dictionnaire chaque fois que l'exécution nécessite la valeur de données réelle (cette recherche est différée aussi longtemps que possible pour des raisons de performances).
Les segments ont également un enregistrement d'en-tête contenant des métadonnées telles que les valeurs minimale et maximale stockées dans le segment. Les informations de l'en-tête peuvent souvent être utilisées pour éliminer les partitions complètes du traitement au moment de l'exécution. Les informations d'enregistrement d'en-tête sont stockées dans la structure racine de données LOB habituelle, donc l'élimination d'un segment signifie que le moteur de stockage peut ignorer complètement la lecture des pages de données LOB à partir du stockage physique. La maximisation du potentiel d'élimination peut nécessiter une conception soignée , notamment une dépendance à l' égard de l'ordre des index clusterisés au moment de la création de l'index Columnstore.
Opérateurs de plans spécifiques
SQL Server 2012 introduit un nouveau mode d'exécution appelé mode batch. Dans ce mode, des paquets d'environ 1000 lignes sont transmis entre les opérateurs, améliorant considérablement l'efficacité d'utilisation du processeur. Dans chaque paquet, les données en colonnes sont représentées comme un vecteur. Tous les opérateurs de plan ne prennent pas en charge le fonctionnement en mode batch, mais des exemples de ceux qui incluent l'analyse d'index Columnstore, la jointure interne de hachage, la construction de table de hachage par lots, le filtre bitmap, l'agrégat de hachage (pas les agrégats scalaires ), le filtre et le calcul scalaire (pour la projection et l'expression) évaluation). Les plans d'exécution des requêtes ont été améliorés pour afficher le mode d'exécution estimé et réel.
Anti-Patterns
Il existe un grand nombre de restrictions dans la première version, notamment des contraintes sur les types de données autorisés . Les types les plus courants sont pris en charge; les types de données non pris en charge incluentDECIMAL
avec une plus grande précision de 18 chiffres, (N)VARCHAR(MAX)
, UNIQUEIDENTIFIER
, types CLR, et (VAR)BINARY
.
L' utilisation de types de chaînes , OUTER JOIN
, IN
,EXISTS
, NOT IN
, OR
,UNION ALL
peut entraîner des performances significativement réduite (exécution en mode ligne), à moins que des solutions de contournement sont employés qui impliquent généralement réécritures inhabituelles de syntaxe comme indiqué dans les articles liés à cette section.
Plus d'information
Remus Rusanu a blogué un excellent aperçu ici .