sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)
S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL DatabaseAzure SQL Managed Instance
Fournit des informations actuelles au niveau du rowgroup sur tous les index columnstore de la base de données active.
Cela étend la vue catalogue sys.column_store_row_groups (Transact-SQL).
Nom de la colonne | Type de données | Description |
---|---|---|
object_id | int | ID de la table sous-jacente. |
index_id | int | ID de cet index columnstore sur object_id table. |
partition_number | int | ID de la partition de table qui contient row_group_id. Utilisez partition_number pour joindre cette vue DMV à sys.partitions. |
row_group_id | int | ID de ce groupe de lignes. Pour les tables partitionnées, la valeur est unique dans la partition. -1 pour une queue en mémoire. |
delta_store_hobt_id | bigint | Le hobt_id pour un groupe de lignes dans le magasin delta. NULL si le groupe de lignes ne se trouve pas dans le magasin delta. NULL pour la fin d’une table en mémoire. |
state | tinyint | Numéro d’ID associé state_description. 0 = INVISIBLE 1 = OPEN 2 = CLOSED 3 = COMPRESSED 4 = TOMBSTONE COMPRESSED est le seul état qui s’applique aux tables en mémoire. |
state_desc | nvarchar(60) | Description de l’état du groupe de lignes : 0 - INVISIBLE - Groupe de lignes en cours de génération. Par exemple : Un groupe de lignes dans le columnstore est INVISIBLE pendant la compression des données. Lorsque la compression est terminée, un commutateur de métadonnées change l’état du groupe de lignes columnstore d’INVISIBLE à COMPRESSED, et l’état du groupe de lignes deltastore de FERMÉ à TOMBSTONE. 1 - OPEN : groupe de lignes deltastore qui accepte de nouvelles lignes. Un groupe de lignes ouvert est toujours au format rowstore et n'a pas été compressé au format columnstore. 2 - FERMÉ : groupe de lignes dans le magasin delta qui contient le nombre maximal de lignes et qui attend que le processus du tuple mover le compresse dans le columnstore. 3 - COMPRESSED - Groupe de lignes compressé avec la compression columnstore et stocké dans le columnstore. 4 - TOMBSTONE : groupe de lignes qui se trouvait auparavant dans le deltastore et qui n’est plus utilisé. |
total_rows | bigint | Nombre de lignes stockées physiquement dans le groupe de lignes. Pour les groupes de lignes compressés. Inclut les lignes marquées supprimées. |
deleted_rows | bigint | Nombre de lignes physiquement stockées dans un groupe de lignes compressé marqué pour suppression. 0 pour les groupes de lignes qui se trouvent dans le magasin delta. |
size_in_bytes | bigint | 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. |
trim_reason | tinyint | Raison qui a déclenché le groupe de lignes compressé pour avoir moins que le nombre maximal de lignes. 0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION 1 - NO_TRIM 2 - CHARGEMENT EN BLOC 3 - REORG 4 - DICTIONARY_SIZE 5 - MEMORY_LIMITATION 6 - RESIDUAL_ROW_GROUP 7 - STATS_MISMATCH 8 - DÉBORDEMENT 9 - AUTO_MERGE |
trim_reason_desc | nvarchar(60) | Description de trim_reason. 0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION : s’est produit lors de la mise à niveau à partir de la version précédente de SQL Server. 1 - NO_TRIM : le groupe de lignes n’a pas été supprimé. Le groupe de ligne a été compressé avec le maximum de 1 048 576 lignes. Le nombre de lignes peut être inférieur si un sous-ensemble de lignes a été supprimé après la fermeture du groupe de lignes delta 2 - BULKLOAD : la taille du lot de chargement en bloc a limité le nombre de lignes. 3 - REORG : compression forcée dans le cadre de la commande REORG. 4 - DICTIONARY_SIZE : la taille du dictionnaire est devenue trop grande pour compresser toutes les lignes ensemble. 5 - MEMORY_LIMITATION : mémoire disponible insuffisante pour compresser toutes les lignes ensemble. 6 - RESIDUAL_ROW_GROUP : fermé dans le cadre du dernier groupe de lignes avec 1 million de lignes < lors de l’opération de génération d’index. Remarque : Une build de partition avec plusieurs cœurs peut entraîner plusieurs coupes de ce type. 7 - STATS_MISMATCH : uniquement pour columnstore sur la table en mémoire. Si les statistiques sont incorrectement indiquées >= 1 million de lignes qualifiées dans la queue, mais que nous en avons trouvé moins, le rowgroup compressé aura < 1 million de lignes 8 - SPILLOVER : uniquement pour columnstore sur la table en mémoire. Si tail a > 1 million de lignes qualifiées, le dernier lot de lignes restantes est compressé si le nombre est compris entre 100 000 et 1 million 9 - AUTO_MERGE : une opération de fusion Tuple Mover en cours d’exécution en arrière-plan a consolidé un ou plusieurs rowgroups dans ce groupe de lignes. |
transition_to_compressed_state | TINYINT | Montre comment ce groupe de lignes a été déplacé du deltastore vers un état compressé dans le columnstore. 1- NOT_APPLICABLE 2 - INDEX_BUILD 3 - TUPLE_MOVER 4 - REORG_NORMAL 5 - REORG_FORCED 6 - BULKLOAD 7 - FUSIONNER |
transition_to_compressed_state_desc | nvarchar(60) | 1 - NOT_APPLICABLE : l’opération ne s’applique pas au deltastore. Ou bien, le rowgroup a été compressé avant la mise à niveau vers SQL Server 2016 (13.x), auquel cas l’historique n’est pas conservé. 2 - INDEX_BUILD : une création d’index ou une reconstruction d’index a compressé le rowgroup. 3 - TUPLE_MOVER : le tuple mover en cours d’exécution en arrière-plan a compressé le rowgroup. Le mouvement de tuple se produit lorsque le rowgroup change d’état de OPEN à CLOSED. 4 - REORG_NORMAL - L’opération de réorganisation, ALTER INDEX ... REORG, a déplacé le rowgroup CLOSED du deltastore vers le columnstore. Cela s’est produit avant que le tuple-mover ait eu le temps de déplacer le rowgroup. 5 - REORG_FORCED - Ce groupe de lignes était ouvert dans le deltastore et a été forcé dans le columnstore avant d’avoir un nombre complet de lignes. 6 - BULKLOAD : une opération de chargement en masse a compressé directement le rowgroup sans utiliser le deltastore. 7 - MERGE : une opération de fusion a consolidé un ou plusieurs rowgroups dans ce rowgroup, puis a effectué la compression columnstore. |
has_vertipaq_optimization | bit | L’optimisation vertiPaq améliore la compression columnstore en réorganisant l’ordre des lignes dans le rowgroup pour obtenir une compression plus élevée. Cette optimisation se produit automatiquement dans la plupart des cas. Il existe deux cas où l’optimisation VertiPaq n’est pas utilisée : a. lorsqu’un rowgroup delta se déplace dans le columnstore et qu’il existe un ou plusieurs index non cluster sur l’index columnstore . Dans ce cas, l’optimisation vertiPaq est ignorée pour réduire les modifications apportées à l’index de mappage ; b. pour les index columnstore sur les tables optimisées en mémoire. 0 = Non 1 = Oui |
Génération | bigint | Génération de groupe de lignes associée à ce groupe de lignes. |
created_time | datetime2 | Heure d’horloge de la création de ce rowgroup. NULL : pour un index columnstore sur une table en mémoire. |
closed_time | datetime2 | Heure d’horloge de la fermeture de ce rowgroup. NULL : pour un index columnstore sur une table en mémoire. |
Résultats
Retourne une ligne pour chaque rowgroup de la base de données active.
Autorisations
Nécessite l’autorisation CONTROL
sur la table et VIEW DATABASE STATE
l’autorisation sur la base de données.
Autorisations pour SQL Server 2022 et versions ultérieures
Nécessite l’autorisation VIEW DATABASE PERFORMANCE STATE sur la base de données.
Exemples
R. Calculez la fragmentation pour décider quand réorganiser ou reconstruire un index columnstore.
Pour les index columnstore, le pourcentage de lignes supprimées est une bonne mesure pour la fragmentation dans un rowgroup. Lorsque la fragmentation est de 20 % ou plus, supprimez les lignes supprimées. Pour obtenir d’autres exemples, consultez Réorganiser et reconstruire des index.
Cet exemple joint sys.dm_db_column_store_row_group_physical_stats à d’autres tables système, puis calcule la Fragmentation
colonne comme une estimation de l’efficacité de chaque groupe de lignes dans la base de données active. 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 i.object_id,
object_name(i.object_id) AS TableName,
i.name AS IndexName,
i.index_id,
i.type_desc,
CSRowGroups.*,
100*(ISNULL(deleted_rows,0))/NULLIF(total_rows,0) AS 'Fragmentation'
FROM sys.indexes AS i
JOIN sys.dm_db_column_store_row_group_physical_stats AS CSRowGroups
ON i.object_id = CSRowGroups.object_id AND i.index_id = CSRowGroups.index_id
-- WHERE object_name(i.object_id) = 'table_name'
ORDER BY object_name(i.object_id), i.name, row_group_id;
Voir aussi
Vues de catalogue d'objets (Transact-SQL)
Affichages catalogue (Transact-SQL)
Index columnstore - Architecture
Questions fréquentes sur l'interrogation des catalogues système de SQL Server
sys.columns (Transact-SQL)
sys.all_columns (Transact-SQL)
sys.computed_columns (Transact-SQL)
sys.column_store_dictionaries (Transact-SQL)
sys.column_store_segments (Transact-SQL)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour