Tous les produits
Search
Centre de documentation

Hologres:Analyze table statistics

Dernière mise à jour :Aug 11, 2026

À partir de la version V1.3, Hologres fournit la vue système hologres.hg_table_info pour collecter quotidiennement des statistiques sur les tables de votre instance. Vous pouvez interroger cette vue afin de surveiller et d'analyser les informations relatives aux tables, puis mettre en œuvre des mesures d'optimisation fondées sur ces statistiques.

Limitations

  • Cette fonctionnalité est disponible uniquement pour Hologres V1.3 et versions ultérieures. Si votre instance exécute une version antérieure, vous devez la mettre à niveau. Pour obtenir de l'aide, consultez Erreurs courantes lors de la préparation de la mise à niveau ou rejoignez le groupe DingTalk Hologres. Pour plus d'informations, consultez Comment obtenir davantage d'assistance en ligne ?.

  • Les données de la vue hologres.hg_table_info ont une fraîcheur de type T+1. Les données d'une journée donnée sont généralement mises à jour avant 05:00 le lendemain. Le jour où une instance Hologres est mise à niveau vers la version V1.3, aucune statistique de table n'est générée. Une requête exécutée ce jour-là renvoie l'erreur meta warehouse store currently not available. Vous pourrez commencer à interroger les statistiques de table dès le lendemain de la mise à niveau.

Remarques d'utilisation

  • Les statistiques de table sont conservées pendant 30 jours par défaut.

  • Pour les tables internes non partitionnées (type='TABLE'), vous pouvez consulter des statistiques détaillées, telles que l'espace de stockage, le nombre de fichiers, le nombre cumulé d'accès et le nombre de lignes.

  • Pour les autres objets, comme les vues, les vues matérialisées, les tables externes et les tables parentes partitionnées, seules les informations de base sont disponibles. Cela inclut le nombre de partitions, le nom de la table externe mappée par une table externe, ainsi que les définitions des vues et des vues matérialisées.

  • La table hologres.hg_table_info appartient au système meta warehouse de Hologres. Étant donné qu'un échec d'interrogation de hologres.hg_table_info n'affecte pas les requêtes métier exécutées dans l'instance, la stabilité de la table hologres.hg_table_info n'est pas couverte par l'accord de niveau de service (SLA) du produit.

Vue hg_table_info

La vue hg_table_info contient les champs suivants.

Remarque
  • Les statistiques de table sont stockées dans la vue système hologres.hg_table_info. Après la mise à niveau d'une instance vers la version V1.3, les informations de table sont collectées quotidiennement par défaut.

  • Certains champs peuvent être null pour les tables créées avant la mise à niveau de l'instance vers la version V1.3, car leurs informations de création n'ont pas été collectées. Pour les tables créées après la mise à niveau, tous les champs sont renseignés.

Champ

Type

Description

Remarques

db_name

text

Nom de la base de données où réside la table.

Aucune

schema_name

text

Nom du schéma où réside la table.

Aucune

table_name

text

Nom de la table.

Aucune

table_id

text

Identifiant unique de la table. Pour une table externe, le format de l'ID est db.schema.table.

Aucune

type

text

Type de l'objet. Valeurs possibles :

  • TABLE : une table standard ou une table enfant partitionnée.

  • PARTITION TABLE : une table parente physique partitionnée.

  • LOGICAL PARTITION TABLE : une table logique partitionnée.

    Remarque

    Ce type est pris en charge à partir de Hologres V3.1.25/V3.2.8. Dans les versions antérieures, le type indiqué est TABLE.

  • DYNAMIC TABLE : une table dynamique.

    Remarque

    Ce type est pris en charge à partir de Hologres V4.0.14. Dans les versions antérieures, le type indiqué est TABLE.

  • FOREIGN TABLE : une table externe.

  • VIEW : une vue.

  • MATERIALIZED VIEW : une vue matérialisée.

  • Si type est VIEW, les champs create_time et last_ddl_time sont null.

  • Si type est VIEW, FOREIGN TABLE ou PARTITION TABLE, les champs last_modify_time, last_access_time, hot_file_count, cold_file_count, total_read_count et total_write_count sont null.

  • Lorsque le type est DYNAMIC TABLE, le champ view_def affiche la requête de définition de tâche, tandis que les propriétés spéciales telles que freshness et auto_refresh_enable sont affichées dans la section dynamic_table_properties du champ table_meta.

partition_spec

text

Condition de partitionnement. Ce champ est valide uniquement pour les tables enfants partitionnées.

Aucune

is_partition

boolean

Indique si la table est une table enfant partitionnée.

Aucune

owner_name

text

Nom d'utilisateur du propriétaire de la table. Vous pouvez joindre cette colonne à la colonne usename de la vue hg_query_log.

Aucune

create_time

timestamp with time zone

Horodatage de création de la table.

Aucune

last_ddl_time

timestamp with time zone

Horodatage de la dernière mise à jour des métadonnées de la table.

Aucune

last_modify_time

timestamp with time zone

Horodatage de la dernière modification des données de la table.

Aucune

last_access_time

timestamp with time zone

Horodatage du dernier accès à la table.

Aucune

view_def

text

Définition de la vue.

Ce champ est valide uniquement pour les vues.

comment

text

Description de la table ou de la vue.

Aucune

hot_storage_size

bigint

Taille du stockage hot utilisé par la table, en octets.

La taille de stockage indiquée dans hg_table_info peut différer du résultat de la fonction pg_relation_size. Cette différence est normale, car hg_table_info est mis à jour quotidiennement et pg_relation_size n'inclut pas la taille de stockage des journaux binaires.

cold_storage_size

bigint

Taille du stockage cold utilisé par la table, en octets.

La taille de stockage indiquée dans hg_table_info peut différer du résultat de la fonction pg_relation_size. Cette différence est normale, car hg_table_info est mis à jour quotidiennement et pg_relation_size n'inclut pas la taille de stockage des journaux binaires.

hot_file_count

bigint

Nombre de fichiers en stockage hot pour la table.

Aucune

cold_file_count

bigint

Nombre de fichiers en stockage cold pour la table.

Aucune

table_meta

jsonb

Métadonnées brutes de la table, au format JSONB.

Aucune

row_count

bigint

Nombre de lignes dans la table ou la partition.

Pour une table parente partitionnée, il s'agit du nombre total de lignes across toutes ses tables enfants.

collect_time

timestamp with time zone

Horodatage de la collecte des statistiques.

Aucune

partition_count

bigint

Nombre de tables enfants partitionnées.

Ce champ est valide uniquement pour les tables parentes partitionnées.

parent_schema_name

text

Nom du schéma de la table parente pour une table enfant partitionnée.

Ce champ est valide uniquement pour les tables enfants partitionnées.

parent_table_name

text

Nom de la table parente pour une table enfant partitionnée.

Ce champ est valide uniquement pour les tables enfants partitionnées.

total_read_count

bigint

Nombre cumulé d'opérations de lecture sur la table. Il s'agit d'une valeur approximative, car les opérations SELECT, INSERT, UPDATE et DELETE peuvent toutes incrémenter le compteur.

Cette valeur est une approximation et n'est pas recommandée pour un comptage précis.

total_write_count

bigint

Nombre cumulé d'opérations d'écriture sur la table. Il s'agit d'une valeur approximative, car les opérations INSERT, UPDATE et DELETE peuvent toutes incrémenter le compteur.

Cette valeur est une approximation et n'est pas recommandée pour un comptage précis.

read_sql_count_1d

bigint

Nombre total d'opérations de lecture sur la table la veille (T-1), de 00:00 à 24:00 (UTC+8).

  • Prise en charge à partir de Hologres V3.0.

  • Pour une table partitionnée, si une instruction SQL cible une table enfant partitionnée spécifique, les données sont collectées uniquement à partir de la table enfant, et non de la table parente.

write_sql_count_1d

bigint

Nombre total d'opérations d'écriture sur la table la veille (T-1), de 00:00 à 24:00 (UTC+8).

  • Prise en charge à partir de Hologres V3.0.

  • Pour une table partitionnée, si une requête SQL cible une table enfant spécifique, les données sont collectées uniquement pour la table enfant, et non pour la table parente.

Accorder des permissions

Vous devez disposer d'autorisations spécifiques pour interroger les statistiques de table. Cette section décrit les règles d'autorisation et la procédure pour les accorder.

  • Consulter les statistiques de table pour toutes les bases de données d'une instance Hologres

    • Accordez les privilèges superuser à l'utilisateur.

      Un superuser peut consulter les statistiques de table pour toutes les bases de données d'une instance Hologres. La commande suivante accorde les privilèges superuser.

      -- Replace "Alibaba Cloud account ID" with the actual username. For a RAM user, prefix the ID with "p4_".
      ALTER USER "Alibaba Cloud account ID" SUPERUSER;
    • Ajoutez les utilisateurs au groupe d'utilisateurs pg_stat_scan_table.

      Outre un superuser, Hologres permet aux utilisateurs du groupe d'utilisateurs pg_stat_scan_tables (pour les versions antérieures à V1.3.44) ou du groupe d'utilisateurs pg_read_all_stats (pour les versions V1.3.44 et ultérieures) de consulter les journaux de statistiques de toutes les tables de la base de données. Si un utilisateur standard doit consulter tous les journaux, il peut contacter un superuser pour être ajouté au groupe d'utilisateurs concerné. La commande d'autorisation est la suivante.

      -- For versions earlier than V1.3.44
      GRANT pg_stat_scan_tables TO "Alibaba Cloud account ID";-- For the expert permission model
      CALL spm_grant('pg_stat_scan_tables', 'Alibaba Cloud account ID');  -- For the simple permission model (SPM)
      CALL slpm_grant('pg_stat_scan_tables', 'Alibaba Cloud account ID'); -- For the schema-level permission model (SLPM)
      
      -- For V1.3.44 and later
      GRANT pg_read_all_stats TO "Alibaba Cloud account ID";-- For the expert permission model
      CALL spm_grant('pg_read_all_stats', 'Alibaba Cloud account ID');  -- For the simple permission model (SPM)
      CALL slpm_grant('pg_read_all_stats', 'Alibaba Cloud account ID'); -- For the schema-level permission model (SLPM)
  • Consulter les statistiques de table pour la base de données actuelle

    Si vous activez le modèle d'autorisation simple (SPM) ou le modèle d'autorisation au niveau du schéma (SLPM) et ajoutez un utilisateur au groupe d'utilisateurs db_admin, le rôle db_admin peut consulter les journaux de statistiques de table pour la base de données actuelle.

    Remarque

    Un utilisateur standard peut interroger les statistiques uniquement pour les tables dont il est propriétaire dans la base de données actuelle.

    CALL spm_grant('<db_name>_admin', 'Alibaba Cloud account ID');  -- For the simple permission model (SPM)
    CALL slpm_grant('<db_name>.admin', 'Alibaba Cloud account ID'); -- For the schema-level permission model (SLPM)

Exemples de requêtes

Cas d'utilisation 1 : Surveiller les tendances des tables internes

-- Monitor trends for all internal tables in an instance, including storage size, number of files, read/write counts, and number of rows.
SELECT
  db_name,
  schema_name,
  table_name,
  collect_time :: date AS collect_date,
  hot_storage_size,
  cold_storage_size,
  hot_file_count,
  cold_file_count,
  read_sql_count_1d,
  write_sql_count_1d,
  row_count
FROM
  hologres.hg_table_info
WHERE
  collect_time > (current_date - interval '1 week')::timestamptz -- For the last week
  AND type ='TABLE'
  ORDER  BY  collect_date desc ;

Cas d'utilisation 2 : Vérifier les modèles d'accès aux grandes tables

-- Check access patterns for the top 10 tables by storage size.
SELECT
  db_name,
  schema_name,
  table_name,
  hot_storage_size + cold_storage_size AS total_storage_size,
  row_count,
  sum(read_sql_count_1d) AS total_read_count,
  sum(write_sql_count_1d) AS total_write_count
FROM
  hologres.hg_table_info
WHERE
  collect_time > (current_date - interval '1 week')::timestamptz -- For the last week
  AND type = 'TABLE'
  AND (
    cold_storage_size IS NOT NULL
    OR hot_storage_size IS NOT NULL
  )
GROUP BY db_name,schema_name,table_name,total_storage_size,row_count
ORDER BY total_storage_size DESC
LIMIT 10;

Cas d'utilisation 3 : Analyser les tendances pour les 10 premières tables

-- Analyze access, storage, and data volume trends over the last week for the top 10 tables by storage (based on yesterday's statistics).
WITH top10_table AS (SELECT
  db_name,
  schema_name,
  table_name,
  hot_storage_size + cold_storage_size AS total_storage_size
FROM
  hologres.hg_table_info
WHERE
  collect_time >= (current_date - interval '1 day')::timestamptz -- Yesterday
  AND collect_time < current_date
  AND type = 'TABLE'
  AND ( cold_storage_size IS NOT NULL OR hot_storage_size IS NOT NULL )
ORDER BY total_storage_size DESC
LIMIT 10
)
SELECT
  base.db_name,
  base.schema_name,
  base.table_name,
  base.hot_storage_size + cold_storage_size AS total_storage_size,
  base.row_count,
  base.read_sql_count_1d,
  base.write_sql_count_1d,
  base.collect_time :: date AS collect_date
FROM
  hologres.hg_table_info AS base
LEFT JOIN
  top10_table
ON
  base.db_name = top10_table.db_name
  AND base.schema_name = top10_table.schema_name
  AND base.table_name = top10_table.table_name
WHERE
  collect_time > (current_date - interval '1 week')::timestamptz -- For the last week
  AND type = 'TABLE'
  AND ( cold_storage_size IS NOT NULL OR hot_storage_size IS NOT NULL )
ORDER BY total_storage_size DESC , collect_date DESC;

Cas d'utilisation 4 : Analyser les tendances pour les 10 dernières tables

-- Analyze access, storage, and data volume trends over the last week for the 10 tables that use the least storage (based on yesterday's statistics).
WITH top10_table AS (SELECT
  db_name,
  schema_name,
  table_name,
  hot_storage_size + cold_storage_size AS total_storage_size
FROM
  hologres.hg_table_info
WHERE
  collect_time >= (current_date - interval '1 day')::timestamptz -- Yesterday
  AND collect_time < current_date
  AND type = 'TABLE'
ORDER BY total_storage_size ASC LIMIT 10
)
SELECT
  base.db_name,
  base.schema_name,
  base.table_name,
  base.hot_storage_size + cold_storage_size AS total_storage_size,
  base.row_count,
  base.read_sql_count_1d,
  base.write_sql_count_1d,
  base.collect_time :: date AS collect_date
FROM
  hologres.hg_table_info AS base
RIGHT JOIN
  top10_table
ON
  base.db_name = top10_table.db_name
  AND base.schema_name = top10_table.schema_name
  AND base.table_name = top10_table.table_name
WHERE
  collect_time > (current_date - interval '1 week')::timestamptz -- For the last week
  AND type = 'TABLE'
ORDER BY total_storage_size ASC  , collect_date DESC ;

Cas d'utilisation 5 : Identifier les grandes tables avec de petits fichiers

-- View the number of files and storage size for each table, and sort by average file size.
-- The table group shows the shard count only for the current database. For other databases, this value is null.
SELECT
  db_name,
  schema_name,
  table_name,
  cold_storage_size + hot_storage_size AS total_storage_size,
  cold_file_count + hot_file_count AS total_file_count,
  (cold_storage_size + hot_storage_size) / (cold_file_count + hot_file_count) AS avg_file_size,
  tmp_table_info.table_meta ->> 'table_group' AS table_group,
  tg_info.shard_count
FROM
  hologres.hg_table_info tmp_table_info
  LEFT JOIN (
    SELECT
      tablegroup_name,
      property_value AS shard_count
    FROM
      hologres.hg_table_group_properties
    WHERE
      property_key = 'shard_count'
  ) tg_info ON tmp_table_info.table_meta ->> 'table_group' = tg_info.tablegroup_name
WHERE
  collect_time > (current_date - interval '1 day')::timestamptz
  AND type = 'TABLE'
  AND (
    cold_storage_size IS NOT NULL
    OR hot_storage_size IS NOT NULL
  )
  AND (
    cold_file_count IS NOT NULL
    OR hot_file_count IS NOT NULL
  )
  AND cold_file_count + hot_file_count <> 0
ORDER BY avg_file_size;

Cas d'utilisation 6 : Vérifier les variations du nombre de lignes

-- View the last modification time and the total change in the number of rows from the last modification.
-- If the instance contains many tables, filter the CTE tmp_table_info to prevent long query times from fetching excessive data.
WITH tmp_table_info AS (
  SELECT
    db_name,
    schema_name,
    table_name,
    row_count,
    collect_time,
    last_modify_time
  FROM
    hologres.hg_table_info
  WHERE
    last_modify_time IS NOT NULL
    AND type = 'TABLE'
    -- Add filters for tmp_table_info here.
    -- For example: collect_time > (current_date - interval '14 day'):: timestamptz
    -- For example: table_name like ''
    -- For example: type = 'PARTITION'
)
SELECT
  end_data.db_name AS db_name,
  end_data.schema_name AS schema_name,
  end_data.table_name AS table_name,
  (end_data.row_count - start_data.row_count) AS modify_row_count,
  end_data.row_count AS current_rows,
  end_data.last_modify_time AS last_modify_time
FROM
  (
    SELECT
      db_name,
      schema_name,
      table_name,
      row_count,
      last_modify_time
    FROM
      tmp_table_info
    WHERE
      collect_time > (current_date - interval '1 day')::timestamptz -- Query the last modification time of the table recorded yesterday.
  ) end_data
  LEFT JOIN (
    SELECT
      db_name,
      schema_name,
      table_name,
      row_count,
      collect_time
    FROM
      tmp_table_info
  ) start_data ON (
    end_data.db_name = start_data.db_name
    AND end_data.schema_name = start_data.schema_name
    AND end_data.table_name = start_data.table_name
    AND end_data.last_modify_time::date = (start_data.collect_time + interval '1 day')::date
  );