Todos os produtos
Search
Central de documentação

Hologres:Analisar estatísticas de tabelas

Última atualização: Jun 28, 2026

A partir da versão V1.3, o Hologres disponibiliza a visualize de sistema hologres.hg_table_info para coletar estatísticas diárias sobre as tabelas da sua instância. Consulte essa visualize para monitorar e analisar informações das tabelas e adotar medidas de otimização com base nas estatísticas obtidas.

Limitações

  • Este recurso está disponível apenas no Hologres V1.3 e versões posteriores. Caso sua instância esteja em uma versão anterior, será necessário atualizá-la. Para obter assistência, consulte Erros comuns de preparação para atualização ou participe do grupo do DingTalk do Hologres. Para mais informações, veja Como obter mais suporte online?.

  • Os dados na visualize hologres.hg_table_info possuem atualização T+1. As informações de um determinado dia geralmente são atualizadas até as 05:00 do dia seguinte. No dia em que uma instância do Hologres é atualizada para a V1.3, nenhuma estatística de tabela é gerada. Uma consulta nesse dia retorna o erro meta warehouse store currently not available. É possível começar a consultar as estatísticas das tabelas no dia posterior à atualização.

Observações de uso

  • Por padrão, as estatísticas das tabelas são retidas por 30 dias.

  • Para tabelas internas não particionadas (type='TABLE'), é possível consultar estatísticas detalhadas, como espaço de armazenamento, quantidade de arquivos, contagens acumuladas de acesso e número de linhas.

  • Em outros objetos, como views, materialized views, foreign tables e tabelas pai particionadas, apenas informações básicas estão disponíveis. Isso inclui o número de partições, o nome da tabela externa mapeada por uma foreign table e as definições de views e materialized views.

  • A tabela hologres.hg_table_info pertence ao sistema de meta warehouse do Hologres. Como uma falha na consulta à hologres.hg_table_info não afeta as consultas de negócio executadas na instância, a estabilidade da tabela hologres.hg_table_info não é coberta pelo acordo de nível de serviço (SLA) do produto.

Visualize hg_table_info

A visualize hg_table_info contém os seguintes campos.

Nota
  • As estatísticas das tabelas ficam armazenadas na visualize de sistema hologres.hg_table_info. Após a atualização de uma instância para a V1.3, as informações das tabelas passam a ser coletadas diariamente por padrão.

  • Alguns campos podem estar nulos para tabelas criadas antes da atualização da instância para a V1.3, pois suas informações de criação não foram coletadas. Já para tabelas criadas após a atualização, todos os campos são preenchidos.

Campo

Tipo

Descrição

Observações

db_name

text

Nome do banco de dados onde a tabela reside.

Nenhuma

schema_name

text

Nome do schema onde a tabela reside.

Nenhuma

table_name

text

Nome da tabela.

Nenhuma

table_id

text

Identificador único da tabela. Para uma foreign table, o formato do ID é db.schema.table.

Nenhuma

type

text

Tipo do objeto. Valores válidos:

  • TABLE: tabela regular ou tabela filha particionada.

  • PARTITION TABLE: tabela pai particionada física.

  • LOGICAL PARTITION TABLE: tabela particionada lógica.

    Nota

    Esse tipo é suportado no Hologres V3.1.25/V3.2.8 e versões posteriores. Em versões anteriores, o tipo reportado é TABLE.

  • DYNAMIC TABLE: tabela dinâmica.

    Nota

    Esse tipo é suportado no Hologres V4.0.14 e versões posteriores. Em versões anteriores, o tipo reportado é TABLE.

  • FOREIGN TABLE: foreign table.

  • VIEW: visualize.

  • MATERIALIZED VIEW: materialized visualize.

  • Se type for VIEW, os campos create_time e last_ddl_time serão nulos.

  • Quando type for VIEW, FOREIGN TABLE ou PARTITION TABLE, os campos last_modify_time, last_access_time, hot_file_count, cold_file_count, total_read_count e total_write_count serão nulos.

  • Quando o tipo for DYNAMIC TABLE, o campo view_def exibe a consulta de definição da tarefa, enquanto propriedades especiais como freshness e auto_refresh_enable aparecem na seção dynamic_table_properties do campo table_meta.

partition_spec

text

Condição de particionamento. Este campo é válido apenas para tabelas filhas particionadas.

Nenhuma

is_partition

boolean

Indica se a tabela é uma tabela filha particionada.

Nenhuma

owner_name

text

Nome de usuário do proprietário da tabela. É possível associar esta coluna à coluna usename da visualize hg_query_log.

Nenhuma

create_time

timestamp with time zone

Timestamp de criação da tabela.

Nenhuma

last_ddl_time

timestamp with time zone

Timestamp da última atualização dos metadados da tabela.

Nenhuma

last_modify_time

timestamp with time zone

Timestamp da última modificação dos dados da tabela.

Nenhuma

last_access_time

timestamp with time zone

Timestamp do último acesso à tabela.

Nenhuma

view_def

text

Definição da visualize.

Campo válido apenas para visualizes.

comment

text

Descrição da tabela ou visualize.

Nenhuma

hot_storage_size

bigint

Tamanho do hot storage utilizado pela tabela, em bytes.

O tamanho de armazenamento reportado em hg_table_info pode diferir do resultado da função pg_relation_size. Essa diferença é esperada, pois hg_table_info é atualizado diariamente e pg_relation_size não inclui o tamanho de armazenamento dos binary logs.

cold_storage_size

bigint

Tamanho do cold storage utilizado pela tabela, em bytes.

O tamanho de armazenamento reportado em hg_table_info pode diferir do resultado da função pg_relation_size. Essa diferença é esperada, pois hg_table_info é atualizado diariamente e pg_relation_size não inclui o tamanho de armazenamento dos binary logs.

hot_file_count

bigint

Quantidade de arquivos no hot storage da tabela.

Nenhuma

cold_file_count

bigint

Quantidade de arquivos no cold storage da tabela.

Nenhuma

table_meta

jsonb

Metadados brutos da tabela, no formato JSONB.

Nenhuma

row_count

bigint

Número de linhas na tabela ou partição.

Para uma tabela pai particionada, este valor representa o total de linhas somando todas as suas tabelas filhas.

collect_time

timestamp with time zone

Timestamp em que as estatísticas foram coletadas.

Nenhuma

partition_count

bigint

Quantidade de tabelas filhas particionadas.

Campo válido apenas para tabelas pai particionadas.

parent_schema_name

text

Nome do schema da tabela pai correspondente a uma tabela filha particionada.

Campo válido apenas para tabelas filhas particionadas.

parent_table_name

text

Nome da tabela pai correspondente a uma tabela filha particionada.

Campo válido apenas para tabelas filhas particionadas.

total_read_count

bigint

Número acumulado de operações de leitura na tabela. Trata-se de um valor aproximado, já que operações SELECT, INSERT, UPDATE e DELETE podem incrementar a contagem.

Valor aproximado; não recomendado para contagens precisas.

total_write_count

bigint

Número acumulado de operações de escrita na tabela. Trata-se de um valor aproximado, já que operações INSERT, UPDATE e DELETE podem incrementar a contagem.

Valor aproximado; não recomendado para contagens precisas.

read_sql_count_1d

bigint

Total de operações de leitura na tabela no dia anterior (T-1), entre 00:00 e 24:00 (UTC+8).

  • Suportado no Hologres V3.0 e versões posteriores.

  • Em tabelas particionadas, se uma instrução SQL visar uma tabela filha específica, os dados serão coletados apenas da tabela filha, e não da tabela pai.

write_sql_count_1d

bigint

Total de operações de escrita na tabela no dia anterior (T-1), entre 00:00 e 24:00 (UTC+8).

  • Suportado no Hologres V3.0 e versões posteriores.

  • Em tabelas particionadas, se uma consulta SQL visar uma tabela filha específica, os dados serão coletados apenas da tabela filha, e não da tabela pai.

Conceder permissões

É necessário ter permissões específicas para consultar estatísticas de tabelas. Esta seção descreve as regras de permissão e como concedê-las.

  • Visualizar estatísticas de tabelas de todos os bancos de dados em uma instância do Hologres

    • Conceda privilégios de superusuário ao usuário.

      Um superusuário consegue visualizar estatísticas de tabelas de todos os bancos de dados em uma instância do Hologres. O comando abaixo concede privilégios de superusuário.

      -- 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;
    • Adicione usuários ao grupo de usuários pg_stat_scan_table.

      Além do superusuário, o Hologres permite que usuários do grupo pg_stat_scan_tables (para versões anteriores à V1.3.44) ou do grupo pg_read_all_stats (para V1.3.44 e posteriores) visualizem logs de estatísticas de todas as tabelas do banco de dados. Se um usuário comum precisar visualizar todos os logs, ele deve solicitar a um superusuário que o adicione ao grupo relevante. O comando de autorização é o seguinte.

      -- 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)
  • Visualizar estatísticas de tabelas do banco de dados atual

    Ao ativar o modelo de permissão simples (SPM) ou o modelo de permissão no nível de schema (SLPM) e adicionar um usuário ao grupo db_admin, a função db_admin poderá visualizar os logs de estatísticas das tabelas do banco de dados atual.

    Nota

    Um usuário comum só pode consultar estatísticas das tabelas de sua propriedade no banco de dados atual.

    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 exemplo

Caso de uso 1: Monitorar tendências de tabelas 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: Verificar padrões de acesso de tabelas 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: Analisar tendências das 10 principais tabelas

-- 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: Analisar tendências das 10 menores tabelas

-- 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 tabelas grandes com arquivos pequenos

-- 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: Verificar alterações na contagem de linhas

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