Todos los productos
Search
Centro de documentos

Hologres:Analyze table statistics

Última actualización: Sep 05, 2026

A partir de la versión V1.3, Hologres ofrece la vista del sistema hologres.hg_table_info para recopilar estadísticas diarias sobre las tablas de su instancia. Puede consultar esta vista para supervisar y analizar la información de las tablas, y aplicar medidas de optimización basadas en dichas estadísticas.

Limitaciones

  • Esta función solo está disponible en Hologres V1.3 y versiones posteriores. Si su instancia tiene una versión anterior, debe actualizarla. Para obtener asistencia, consulte Common upgrade preparation errors o únase al grupo de DingTalk de Hologres. Para más información, consulte How to get more online support?.

  • Los datos en la vista hologres.hg_table_info tienen una actualización T+1. Por lo general, los datos de un día determinado se actualizan antes de las 05:00 del día siguiente. El día que se actualiza una instancia de Hologres a la versión V1.3 no se generan estadísticas de tablas. Una consulta realizada ese día devolverá el error meta warehouse store currently not available. Podrá comenzar a consultar las estadísticas de las tablas al día siguiente de la actualización.

Notas de uso

  • Las estadísticas de las tablas se conservan durante 30 días de forma predeterminada.

  • Para las tablas internas no particionadas (type='TABLE'), puede consultar estadísticas detalladas como el espacio de almacenamiento, la cantidad de archivos, los recuentos acumulados de acceso y el número de filas.

  • Para otros objetos, como vistas, vistas materializadas, tablas externas y tablas padre particionadas, solo hay información básica disponible. Esto incluye el número de particiones, el nombre de la tabla externa a la que se asigna una tabla foránea y las definiciones de vistas y vistas materializadas.

  • La tabla hologres.hg_table_info pertenece al sistema de meta warehouse de Hologres. Dado que un fallo al consultar hologres.hg_table_info no afecta las consultas de negocio que se ejecutan en la instancia, la estabilidad de la tabla hologres.hg_table_info no está cubierta por el acuerdo de nivel de servicio (SLA) del producto.

Vista hg_table_info

La vista hg_table_info contiene los siguientes campos.

Nota
  • Las estadísticas de las tablas se almacenan en la vista del sistema hologres.hg_table_info. Después de actualizar una instancia a la versión V1.3, la información de las tablas se recopila diariamente de forma predeterminada.

  • Algunos campos pueden ser nulos para las tablas creadas antes de actualizar la instancia a la versión V1.3, ya que no se recopiló su información de creación. En el caso de las tablas creadas después de la actualización, todos los campos están completos.

Campo

Tipo

Descripción

Observaciones

db_name

text

Nombre de la base de datos donde reside la tabla.

Ninguna

schema_name

text

Nombre del esquema donde reside la tabla.

Ninguna

table_name

text

Nombre de la tabla.

Ninguna

table_id

text

Identificador único de la tabla. Para una tabla externa, el formato del ID es db.schema.table.

Ninguna

type

text

Tipo de objeto. Valores válidos:

  • TABLE: tabla regular o tabla hija particionada.

  • PARTITION TABLE: tabla padre particionada física.

  • LOGICAL PARTITION TABLE: tabla particionada lógica.

    Nota

    Este tipo es compatible con Hologres V3.1.25/V3.2.8 y versiones posteriores. En versiones anteriores, el tipo reportado es TABLE.

  • DYNAMIC TABLE: tabla dinámica.

    Nota

    Este tipo es compatible con Hologres V4.0.14 y versiones posteriores. En versiones anteriores, el tipo reportado es TABLE.

  • FOREIGN TABLE: tabla externa.

  • VIEW: vista.

  • MATERIALIZED VIEW: vista materializada.

  • Si type es VIEW, los campos create_time y last_ddl_time son nulos.

  • Si type es VIEW, FOREIGN TABLE o PARTITION TABLE, los campos last_modify_time, last_access_time, hot_file_count, cold_file_count, total_read_count y total_write_count son nulos.

  • Cuando el tipo es DYNAMIC TABLE, el campo view_def muestra la consulta de definición de la tarea, mientras que propiedades especiales como freshness y auto_refresh_enable se muestran en la sección dynamic_table_properties del campo table_meta.

partition_spec

text

Condición de particionamiento. Este campo solo es válido para tablas hijas particionadas.

Ninguna

is_partition

boolean

Indica si la tabla es una tabla hija particionada.

Ninguna

owner_name

text

Nombre de usuario del propietario de la tabla. Puede unir esta columna con la columna usename de la vista hg_query_log.

Ninguna

create_time

timestamp with time zone

Marca de tiempo de creación de la tabla.

Ninguna

last_ddl_time

timestamp with time zone

Marca de tiempo de la última actualización de los metadatos de la tabla.

Ninguna

last_modify_time

timestamp with time zone

Marca de tiempo de la última modificación de los datos de la tabla.

Ninguna

last_access_time

timestamp with time zone

Marca de tiempo del último acceso a la tabla.

Ninguna

view_def

text

Definición de la vista.

Este campo solo es válido para vistas.

comment

text

Descripción de la tabla o vista.

Ninguna

hot_storage_size

bigint

Tamaño del almacenamiento en caliente utilizado por la tabla, en bytes.

El tamaño de almacenamiento reportado en hg_table_info puede diferir del resultado de la función pg_relation_size. Esta diferencia es esperada porque hg_table_info se actualiza diariamente y pg_relation_size no incluye el tamaño de almacenamiento de los registros binarios.

cold_storage_size

bigint

Tamaño del almacenamiento en frío utilizado por la tabla, en bytes.

El tamaño de almacenamiento reportado en hg_table_info puede diferir del resultado de la función pg_relation_size. Esta diferencia es esperada porque hg_table_info se actualiza diariamente y pg_relation_size no incluye el tamaño de almacenamiento de los registros binarios.

hot_file_count

bigint

Número de archivos en almacenamiento en caliente para la tabla.

Ninguna

cold_file_count

bigint

Número de archivos en almacenamiento en frío para la tabla.

Ninguna

table_meta

jsonb

Metadatos sin procesar de la tabla, en formato JSONB.

Ninguna

row_count

bigint

Número de filas en la tabla o partición.

Para una tabla padre particionada, este es el número total de filas en todas sus tablas hijas.

collect_time

timestamp with time zone

Marca de tiempo de la recopilación de las estadísticas.

Ninguna

partition_count

bigint

Número de tablas hijas particionadas.

Este campo solo es válido para tablas padre particionadas.

parent_schema_name

text

Nombre del esquema de la tabla padre para una tabla hija particionada.

Este campo solo es válido para tablas hijas particionadas.

parent_table_name

text

Nombre de la tabla padre para una tabla hija particionada.

Este campo solo es válido para tablas hijas particionadas.

total_read_count

bigint

Número acumulado de operaciones de lectura en la tabla. Es un valor aproximado, ya que las operaciones SELECT, INSERT, UPDATE y DELETE pueden incrementar el recuento.

Este valor es una aproximación y no se recomienda para recuentos precisos.

total_write_count

bigint

Número acumulado de operaciones de escritura en la tabla. Es un valor aproximado, ya que las operaciones INSERT, UPDATE y DELETE pueden incrementar el recuento.

Este valor es una aproximación y no se recomienda para recuentos precisos.

read_sql_count_1d

bigint

Número total de operaciones de lectura en la tabla durante el día anterior (T-1), de 00:00 a 24:00 (UTC+8).

  • Compatible con Hologres V3.0 y versiones posteriores.

  • En una tabla particionada, si una sentencia SQL apunta a una tabla hija específica, los datos se recopilan solo de dicha tabla hija y no de la tabla padre.

write_sql_count_1d

bigint

Número total de operaciones de escritura en la tabla durante el día anterior (T-1), de 00:00 a 24:00 (UTC+8).

  • Compatible con Hologres V3.0 y versiones posteriores.

  • En una tabla particionada, si una consulta SQL apunta a una tabla hija específica, los datos se recopilan solo para dicha tabla hija y no para la tabla padre.

Otorgar permisos

Debe contar con permisos específicos para consultar las estadísticas de las tablas. Esta sección describe las reglas de permisos y cómo otorgarlos.

  • Consultar estadísticas de tablas para todas las bases de datos en una instancia de Hologres

    • Otorgue privilegios de superusuario al usuario.

      Un superusuario puede consultar las estadísticas de las tablas de todas las bases de datos en una instancia de Hologres. El siguiente comando otorga privilegios de superusuario.

      -- 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;
    • Agregue usuarios al grupo de usuarios pg_stat_scan_table.

      Además del superusuario, Hologres permite que los usuarios del grupo pg_stat_scan_tables (para versiones anteriores a V1.3.44) o del grupo pg_read_all_stats (para V1.3.44 y versiones posteriores) consulten los registros de estadísticas de todas las tablas de la base de datos. Si un usuario regular necesita consultar todos los registros, puede contactar a un superusuario para que lo agregue al grupo correspondiente. El comando de autorización es el siguiente.

      -- 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)
  • Consultar estadísticas de tablas para la base de datos actual

    Si habilita el modelo de permisos simple (SPM) o el modelo de permisos a nivel de esquema (SLPM) y agrega un usuario al grupo db_admin, el rol db_admin podrá consultar los registros de estadísticas de las tablas de la base de datos actual.

    Nota

    Un usuario regular solo puede consultar estadísticas de las tablas de su propiedad en la base de datos actual.

    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)

Consultas de ejemplo

Caso de uso 1: Supervisar tendencias de tablas internas

-- 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 ;

Caso de uso 2: Comprobar patrones de acceso de tablas grandes

-- 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;

Caso de uso 3: Analizar tendencias de las 10 tablas principales

-- 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;

Caso de uso 4: Analizar tendencias de las 10 tablas con menor uso

-- 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 ;

Caso de uso 5: Identificar tablas grandes con archivos pequeños

-- 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;

Caso de uso 6: Comprobar cambios en el recuento de filas

-- 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
  );