sys.pdw_nodes_column_store_row_groups (Transact-SQL)

S’applique à : Azure Synapse AnalyticsAnalytics Platform System (PDW)

Fournit des informations d’index columnstore cluster par segment pour aider l’administrateur à prendre des décisions de gestion système dans Azure Synapse Analytics. sys.pdw_nodes_column_store_row_groups a une colonne pour le nombre total de lignes physiquement stockées (y compris celles marquées comme supprimées) et une colonne pour le nombre de lignes marquées comme supprimées. Utilisez sys.pdw_nodes_column_store_row_groups pour déterminer quels groupes de lignes ont un pourcentage élevé de lignes supprimées et doivent être reconstruits.

Nom de la colonne Type de données Description
object_id int ID de la table sous-jacente. Il s’agit de la table physique sur le nœud de calcul, et non de la object_id de la table logique sur le nœud Contrôle. Par exemple, object_id ne correspond pas à la object_id dans sys.tables.

Pour vous joindre à sys.tables, utilisez sys.pdw_index_mappings.
index_id int ID de l’index columnstore cluster sur object_id table.
partition_number int ID de la partition de table qui contient le groupe de lignes row_group_id. Vous pouvez utiliser partition_number pour joindre cette DMV à sys.partitions.
row_group_id int ID de ce groupe de lignes. Cet ID est unique dans la partition.
dellta_store_hobt_id bigint hobt_id des groupes de lignes delta, ou NULL si le type de groupe de lignes n'est pas delta. Un groupe de lignes delta est un groupe de lignes en lecture/écriture qui reçoit des enregistrements. Un groupe de lignes delta a l’status OPEN. Un groupe de lignes delta est toujours au format rowstore et n'a pas été compressé au format columnstore.
state tinyint Numéro d'ID associé à state_description.

1 = OPEN

2 = CLOSED

3 = COMPRESSED
state_desccription nvarchar(60) Description de l'état permanent du groupe de lignes :

OPEN : groupe de lignes en lecture/écriture qui accepte de nouveaux enregistrements. Un groupe de lignes ouvert est toujours au format rowstore et n'a pas été compressé au format columnstore.

FERMÉ : groupe de lignes qui a été rempli, mais qui n’est pas encore compressé par le processus de déplacement de tuples.

COMPRESSED : groupe de lignes qui a été rempli et compressé.
total_rows bigint Nombre total de lignes stockées physiquement dans le groupe de lignes. Certaines peuvent avoir été supprimées, mais elles sont toujours stockées. Le nombre maximal de lignes d'un groupe de lignes est 1 048 576 (hexadécimal FFFFF).
deleted_rows bigint Nombre de lignes physiquement stockées dans le groupe de lignes marquées pour suppression.

Toujours 0 pour les groupes de lignes DELTA.
size_in_bytes int Taille combinée, en octets, de toutes les pages de ce groupe de lignes. Cette taille n’inclut pas la taille requise pour stocker les métadonnées ou les dictionnaires partagés.
pdw_node_id int ID unique d’un nœud Azure Synapse Analytics.
distribution_id int ID unique de la distribution.

Notes

Retourne une ligne pour chaque groupe de lignes columnstore pour chaque table ayant un index columnstore cluster ou non cluster.

Utilisez sys.pdw_nodes_column_store_row_groups pour déterminer le nombre de lignes incluses dans le groupe de lignes et la taille du groupe de lignes.

Lorsque le nombre de lignes supprimées dans un groupe de lignes atteint un fort pourcentage du nombre total de lignes, la table est moins efficace. Reconstruisez l'index columnstore pour réduire la taille de la table, ce qui réduit les E/S disque nécessaires pour lire la table. Pour reconstruire l’index columnstore, utilisez l’option REBUILD de l’instruction ALTER INDEX .

Le columnstore pouvant être mis à jour insère d’abord de nouvelles données dans un rowgroup OPEN , qui est au format rowstore et est également parfois appelé table delta. Une fois qu’un rowgroup ouvert est plein, son état passe à FERMÉ. Un rowgroup fermé est compressé au format columnstore par le tuple mover et l’état passe à COMPRESSED. Le moteur de tuple est un processus en arrière-plan qui se réveille régulièrement et vérifie s'il existe des rowgroups fermés prêts à être compressés dans un rowgroup columnstore. Le moteur de tuple libère également les rowgroups dans lesquels chaque ligne a été supprimée. Les rowgroups libérés sont marqués comme RETIRÉs. Pour exécuter immédiatement le tuple mover, utilisez l’option REORGANIZE de l’instruction ALTER INDEX .

Lorsqu'un groupe de lignes columnstore est rempli, il est compressé, et cesse de recevoir de nouvelles lignes. Lorsque vous supprimez des lignes d'un groupe compressé, elles sont conservées mais sont marquées comme étant supprimées. Les mises à jour dans un groupe compressé sont implémentées comme une suppression du groupe compressé, et une insertion dans un groupe ouvert.

Autorisations

Nécessite l’autorisation VIEW SERVER STATE.

Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)

L’exemple suivant joint la table sys.pdw_nodes_column_store_row_groups à d’autres tables système pour retourner des informations sur des tables spécifiques. La colonne calculée PercentFull est une estimation de l'efficacité du groupe de lignes. Pour rechercher des informations sur une seule table, supprimez les traits d’union de commentaire devant la clause WHERE et fournissez un nom de table.

SELECT IndexMap.object_id,   
  object_name(IndexMap.object_id) AS LogicalTableName,   
  i.name AS LogicalIndexName, IndexMap.index_id, NI.type_desc,   
  IndexMap.physical_name AS PhyIndexNameFromIMap,   
  CSRowGroups.*,  
  100*(ISNULL(deleted_rows,0))/total_rows AS PercentDeletedRows   
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.pdw_index_mappings AS IndexMap  
    ON i.object_id = IndexMap.object_id  
    AND i.index_id = IndexMap.index_id  
JOIN sys.pdw_nodes_indexes AS NI  
    ON IndexMap.physical_name = NI.name  
    AND IndexMap.index_id = NI.index_id  
JOIN sys.pdw_nodes_column_store_row_groups AS CSRowGroups  
    ON CSRowGroups.object_id = NI.object_id   
    AND CSRowGroups.pdw_node_id = NI.pdw_node_id  
    AND CSRowGroups.distribution_id = NI.distribution_id
    AND CSRowGroups.index_id = NI.index_id      
WHERE total_rows > 0
--WHERE t.name = '<table_name>'   
ORDER BY object_name(i.object_id), i.name, IndexMap.physical_name, pdw_node_id;  

L’exemple Azure Synapse Analytics suivant compte les lignes par partition pour les magasins de colonnes en cluster, ainsi que le nombre de lignes dans les groupes de lignes ouverts, fermés ou compressés :

SELECT
    s.name AS [Schema Name]
    ,t.name AS [Table Name]
    ,rg.partition_number AS [Partition Number]
    ,SUM(rg.total_rows) AS [Total Rows]
    ,SUM(CASE WHEN rg.State = 1 THEN rg.Total_rows Else 0 END) AS [Rows in OPEN Row Groups]
    ,SUM(CASE WHEN rg.State = 2 THEN rg.Total_Rows ELSE 0 END) AS [Rows in Closed Row Groups]
    ,SUM(CASE WHEN rg.State = 3 THEN rg.Total_Rows ELSE 0 END) AS [Rows in COMPRESSED Row Groups]
FROM sys.pdw_nodes_column_store_row_groups rg
  JOIN sys.pdw_nodes_tables pt
    ON rg.object_id = pt.object_id
    AND rg.pdw_node_id = pt.pdw_node_id
    AND pt.distribution_id = rg.distribution_id
  JOIN sys.pdw_table_mappings tm
    ON pt.name = tm.physical_name
  INNER JOIN sys.tables t
    ON tm.object_id = t.object_id
  INNER JOIN sys.schemas s
    ON t.schema_id = s.schema_id
GROUP BY s.name, t.name, rg.partition_number
ORDER BY 1, 2

Voir aussi

Vues de catalogue Azure Synapse Analytics et Parallel Data Warehouse
CREATE COLUMNSTORE INDEX (Transact-SQL)
sys.pdw_nodes_column_store_segments (Transact-SQL)
sys.pdw_nodes_column_store_dictionaries (Transact-SQL)