sys.column_store_segments (Transact-SQL)

S’applique à : SQL Server 2012 (11.x) et azure SQL Managed Instance ultérieure

Retourne une ligne pour chaque segment de colonne dans un index columnstore. Il existe un segment de colonne par colonne par rowgroup. Par exemple, une table avec 10 rowgroups et 34 colonnes retourne 340 lignes.

Nom de la colonne Type de données Description
partition_id bigint Indique l'ID de partition. Unique dans une base de données.
hobt_id bigint ID du tas ou de l’index B-tree (HoBT) pour la table qui a cet index columnstore.
column_id int ID de la colonne columnstore.
segment_id int ID du rowgroup. Pour une compatibilité descendante, le nom de colonne continue d’être appelé segment_id même s’il s’agit de l’ID de rowgroup. Vous pouvez identifier de manière unique un segment à l’aide <de hobt_id, partition_id, column_id, <segment_id>>.
version int Version du format de segment de colonne.
encoding_type int Type d’encodage utilisé pour ce segment :

1 = VALUE_BASED - non-string/binary sans dictionnaire (similaire à 4 avec certaines variantes internes)

2 = VALUE_HASH_BASED - colonne non-string/binaire avec des valeurs courantes dans le dictionnaire

3 = STRING_HASH_BASED - colonne chaîne/binaire avec des valeurs communes dans le dictionnaire

4 = STORE_BY_VALUE_BASED - non-string/binary sans dictionnaire

5 = STRING_STORE_BY_VALUE_BASED - chaîne/binaire sans dictionnaire

Pour plus d’informations, consultez la section Remarques.
row_count int Nombre de lignes dans le groupe de lignes.
has_nulls int 1 si le segment de colonne a des valeurs NULL.
base_id bigint ID de valeur de base si le type d’encodage 1 est utilisé. Si le type d’encodage 1 n’est pas utilisé, base_id a la valeur -1.
Ampleur float Magnitude si le type d’encodage 1 est utilisé. Si le type d’encodage 1 n’est pas utilisé, la magnitude est définie sur -1.
primary_dictionary_id int La valeur 0 représente le dictionnaire global. La valeur -1 indique qu’il n’existe aucun dictionnaire global créé pour cette colonne.
secondary_dictionary_id int Une valeur non nulle pointe vers le dictionnaire local pour cette colonne dans le segment actuel (par exemple, le rowgroup). La valeur -1 indique qu’il n’existe aucun dictionnaire local pour ce segment.
min_data_id bigint ID de données minimal dans le segment de colonne.
max_data_id bigint ID de données maximal dans le segment de colonne.
null_value bigint Valeur utilisée pour représenter les valeurs NULL.
on_disk_size bigint Taille de segment en octets.
collation_id int S’applique à SQL Server 2022 (16.x) et versions ultérieures.
Classement actuel lors de la création du segment. Cartes à un ID interne. Actuellement interne uniquement et non pour le développement.
min_deep_data varbinary(18) S’applique à SQL Server 2022 (16.x) et versions ultérieures.
Utilisé pour l’élimination des segments.1 Pour une utilisation interne uniquement.
max_deep_data varbinary(18) S’applique à SQL Server 2022 (16.x) et versions ultérieures.
Utilisé pour l’élimination des segments.1 Pour une utilisation interne uniquement.

1 Après la mise à niveau vers une version de SQL Server qui prend en charge l’élimination de segment min/max de chaîne (SQL Server 2022 (16.x) et ultérieure), min_deep_data et max_deep_data sera NULL jusqu’à ce que l’index columnstore soit reconstruit, à l’aide d’une fonction REBUILD ou DROP/CREATE. Après une reconstruction, les segments qui contiennent des types de données qui peuvent tirer parti de l’élimination de segment min/max de chaîne contiennent des données.

Notes

Le type d’encodage de segment columnstore est sélectionné par l’Moteur de base de données avec l’objectif d’atteindre le coût de stockage le plus bas, en analysant les données de segment. Si les données sont principalement distinctes, la Moteur de base de données utilise l’encodage basé sur des valeurs. Si les données ne sont généralement pas distinctes, la Moteur de base de données utilise l’encodage basé sur le hachage. Le choix entre l’encodage basé sur une chaîne et basé sur des valeurs est lié au type de données stockées, que les données de chaîne ou les données binaires soient stockées. Tous les encodages tirent parti de l’empaquetage de bits et de l’encodage de longueur d’exécution lorsque cela est possible.

L’élimination des segments Columnstore s’applique aux types de données numériques, de date et d’heure et au type de données datetimeoffset avec une échelle inférieure ou égale à deux. À compter de SQL Server 2022 (16.x), les fonctionnalités d’élimination des segments s’étendent aux types de données chaîne, binaire, identificateur unique et datetimeoffset pour une mise à l’échelle supérieure à deux. L’élimination des segments ne s’applique pas aux types de données métier tels que les longueurs de type de données (max).

Autorisations

Toutes les colonnes nécessitent au moins VIEW DEFINITION une autorisation sur la table. Les colonnes suivantes retournentNULL, sauf si l’utilisateur a SELECT également l’autorisation : has_nulls, , base_idmagnitude, min_data_id, , max_data_idet null_value.

La visibilité des métadonnées dans les affichages catalogue est limitée aux éléments sécurisables qu’un utilisateur possède ou sur lesquels l’utilisateur a reçu une autorisation. Pour plus d'informations, consultez Metadata Visibility Configuration.

Exemples

La requête suivante retourne des informations sur les segments d'un index columnstore.

SELECT i.name, p.object_id, p.index_id, i.type_desc,
    COUNT(*) AS number_of_segments
FROM sys.column_store_segments AS s
INNER JOIN sys.partitions AS p
    ON s.hobt_id = p.hobt_id
INNER JOIN sys.indexes AS i
    ON p.object_id = i.object_id
WHERE i.type = 5 OR i.type = 6
GROUP BY i.name, p.object_id, p.index_id, i.type_desc ;
GO

Étapes suivantes