Monitorar o mecanismo colunar

Selecione uma versão da documentação:

Nesta página, descrevemos como monitorar a utilização do mecanismo colunar.

Verificar o uso do mecanismo colunar usando EXPLAIN

Para observar os novos operadores colunares que aparecem no plano de consulta gerado, verifique o uso do mecanismo colunar usando a instrução EXPLAIN.

EXPLAIN (ANALYZE,COSTS OFF,BUFFERS,TIMING OFF,SUMMARY OFF)
  SELECT l_returnflag, l_linestatus, l_quantity, l_extendedprice,
         l_discount, l_tax
    FROM lineitem
   WHERE l_shipdate <= date '1992-08-06'
;
                                 QUERY PLAN
-----------------------------------------------------------------------------
 Append (actual rows=3941797 loops=1)
   Buffers: shared hit=9
   ->  Custom Scan (columnar scan) on lineitem (actual rows=3941797 loops=1)
         Filter: (l_shipdate <= '1992-08-06'::date)
         Rows Removed by Columnar Filter: 56054083
         Columnar cache search mode: columnar filter only
         Buffers: shared hit=9
   ->  Seq Scan on lineitem (never executed)
  Filter: (l_shipdate <= '1992-08-06'::date)
  • Custom Scan (columnar scan) indica que a verificação do mecanismo colunar está incluída no plano de consulta.
  • Rows Removed by Columnar Filter lista o número de linhas filtradas pela execução vetorizada colunar.
  • Columnar cache search mode pode ser columnar filter only, native ou row store scan. O planejador escolhe o modo de pesquisa automaticamente com base na capacidade de avaliação de custos e pushdown.

Quando o planejador escolhe o modo native, ele envia alguns dos operadores colunares para a verificação:

  • Rows Aggregated by Columnar Scan lista o número de linhas agregadas.
  • Rows Sorted by Columnar Scan lista o número de linhas que são classificadas.
  • Rows Limited by Columnar Scan lista o número limitado de linhas que foram verificadas.

Com as mesclagens, os operadores de verificação colunar também podem usar o modo Late Materialization.

EXPLAIN (ANALYZE,COSTS OFF,BUFFERS,TIMING OFF,SUMMARY OFF)
  SELECT l_shipmode, o_orderpriority
    FROM orders, lineitem
   WHERE o_orderkey = l_orderkey
         AND l_shipmode in ('AIR', 'FOB')
         AND l_receiptdate >= date '1995-01-01'
;
                                 QUERY PLAN
-----------------------------------------------------------------------------
 Hash Join (actual rows=9865288 loops=1)
   Hash Cond: (lineitem.l_orderkey = orders.o_orderkey)
   Buffers: temp read=127738 written=127738
   ->  Append (actual rows=9865288 loops=1)
         ->  Custom Scan (columnar scan) on lineitem (actual rows=9865288 loops=1)
               Filter: ((l_shipmode = ANY ('{AIR,FOB}'::bpchar[])) AND
               (l_receiptdate >= '1995-01-01'::date))
               Rows Removed by Columnar Filter: 50130592
               Columnar cache search mode: native
         ->  Index Scan using idx_lineitem_orderkey_fkidx on lineitem
             (never executed)
               Filter: ((l_shipmode = ANY ('{AIR,FOB}'::bpchar[])) AND
               (l_receiptdate >= '1995-01-01'::date))
   ->  Hash (actual rows=15000000 loops=1)
         Buckets: 1048576  Batches: 32  Memory Usage: 37006kB
         Buffers: temp written=83357
         ->  Append (actual rows=15000000 loops=1)
               ->  Custom Scan (columnar scan) on orders (actual rows=15000000
                   loops=1)
                     Rows Removed by Columnar Filter: 0
                     Columnar projection mode: late materialization
                     Columnar cache search mode: native
               ->  Seq Scan on orders (never executed)

Columnar projection mode pode ser late materialization. Os operadores colunares escolhem esse modo automaticamente quando o planejador otimiza a projeção adiando a materialização de alguns valores de coluna.

Ver o uso da junção vetorizada do mecanismo colunar

Para verificar o novo operador de junção vetorizada, use a instrução EXPLAIN para observar o novo operador Vectorized Hash Join que aparece no plano de consulta gerado de uma consulta.

EXPLAIN (ANALYZE,COSTS OFF,BUFFERS,TIMING OFF,SUMMARY OFF)
  SELECT l_quantity, l_extendedprice, l_discount, l_tax
    FROM lineitem, orders
    WHERE l_shipdate <= date '2022-08-06'
    AND  l_orderkey = o_orderkey
    AND  o_orderdate <= date '2025-03-07';
                                      QUERY PLAN
---------------------------------------------------------------------------------------
 Vectorized Hash Join (actual rows=3934686 loops=1)
   Vectorized partitioning, Partitions: 16 (Disk usage: 208MB)
   (Peak Memory Usage: 27MB, Threads: 1)
   Hash Cond: (lineitem.l_orderkey = orders.o_orderkey)
   Rows Removed by Bloom Filter: 0
   Buffers: temp read=26728 written=26728
   ->  Append (actual rows=3934686 loops=1)
         ->  Custom Scan (columnar scan) on lineitem (actual rows=3934686 loops=1)
               Filter: (l_shipdate <= '2022-08-06'::date)
               Rows Removed by Columnar Filter: 56051366
               Columnar cache search mode: native
         ->  Seq Scan on lineitem (never executed)
               Filter: (l_shipdate <= '2022-08-06'::date)
   ->  Vectorized Hash (actual rows=7245824 loops=1)
         Build bloom filter, Memory Usage: 1024kB
         ->  Append (actual rows=7245824 loops=1)
               ->  Custom Scan (columnar scan) on orders (actual rows=7245824 loops=1)
                     Filter: (o_orderdate <= '2025-03-07'::date)
                     Rows Removed by Columnar Filter: 7754176
                     Columnar cache search mode: native
               ->  Seq Scan on orders (never executed)
                     Filter: (o_orderdate <= '2025-03-07'::date)
  • Vectorized Hash Join indica que a mesclagem entre as duas relações usou a mesclagem de hash vetorizada.
  • Vectorized partitioning, Partitions: lista o número de partições em que os dados foram divididos.

Ver informações sobre tabelas com colunas no armazenamento de colunas

É possível consultar a visualização g_columnar_relations para ver informações sobre as tabelas ou as visualizações materializadas com colunas no armazenamento de colunas.

SELECT * FROM g_columnar_relations;

┌─[ RECORD 1 ]────────┬───────────────────┐
│ relation_name       │ tbl_parallel_test │
│ schema_name         │ public            │
│ database_name       │ advisor           │
│ status              │ Usable            │
│ size                │ 581431259         │
│ columnar_unit_count │ 3                 │
│ invalid_block_count │ 0                 │
│ total_block_count   │ 8337              │
├─[ RECORD 2 ]────────┼───────────────────┤
│ relation_name       │ lineitem          │
│ schema_name         │ public            │
│ database_name       │ advisor           │
│ status              │ Usable            │
│ size                │ 423224944         │
│ columnar_unit_count │ 29                │
│ invalid_block_count │ 0                 │
│ total_block_count   │ 115662            │
├─[ RECORD 3 ]────────┼───────────────────┤

Ver informações sobre as colunas no armazenamento de colunas

É possível consultar a visualização g_columnar_columns para ver informações sobre as colunas no armazenamento de colunas, incluindo o tamanho delas e o horário do último acesso.

SELECT database_name, schema_name, relation_name, column_name, size_in_bytes, last_accessed_time FROM g_columnar_columns;

Ver o armazenamento de colunas na UI da Web

Também é possível conferir o inventário do repositório de colunas na interface do usuário da Web do AlloyDB Omni:

  1. Conecte-se à interface da Web e selecione o cluster.
  2. No menu de navegação, clique em Mecanismo colunar.
  3. Na tabela Dados do armazenamento colunar, revise as colunas preenchidas no armazenamento colunar:
    • Nome do banco de dados: o banco de dados que contém a relação.
    • Nome do esquema: o esquema da relação.
    • Nome da relação: o nome da tabela ou visualização materializada.
    • Nome da coluna: o nome da coluna em formato de coluna.
    • Tipo de coluna: o tipo de dados SQL da coluna.
    • Status: o status de prontidão da coluna no armazenamento de colunas (por exemplo, Usable).
    • Tamanho: o consumo de memória da coluna no repositório de colunas.
    • Acessos: o número de vezes que a coluna foi acessada por verificações colunares.
    • Último acesso: o carimbo de data/hora do acesso mais recente à verificação colunar.

Ver estatísticas de execução do mecanismo colunar para consultas recentes

É possível conferir as estatísticas de execução do mecanismo colunar para consultas recentes usando a visualização g_columnar_stat_statements. Essa visualização adiciona estatísticas do mecanismo colunar à visualização pg_stat_statements fornecida pela extensão pg_stat_statements. Para usar essa visualização, primeiro ative a extensão pg_stat_statements.

  1. Ative a extensão pg_stat_statements:
    CREATE EXTENSION pg_stat_statements;
    
  2. Execute as consultas com as estatísticas que você quer ver. É possível fazer isso manualmente ou deixar passar tempo suficiente para que os aplicativos executem essas consultas com o pg_stat_statements ativado.
  3. Consulte as visualizações g_columnar_stat_statements e pg_stat_statements. A consulta a seguir recupera todas as estatísticas de execução colunares, incluindo aquelas que foram coletadas antes da criação da extensão pg_stat_statements. O valor 10 de userid indica que as estatísticas foram coletadas antes da criação da extensão pg_stat_statements.
    SELECT *
    FROM pg_stat_statements(TRUE) AS pg_stats
         FULL JOIN g_columnar_stat_statements AS g_stats
         ON pg_stats.userid = g_stats.user_id AND
            pg_stats.dbid = g_stats.db_id AND
            pg_stats.queryid = g_stats.query_id
    WHERE columnar_unit_read > 0;
    
    ┌─[ RECORD 1 ]────────┬───────────────────────────────
    │ userid              │ 10                            │
    │ dbid                │ 33004                         │
    │ queryid             │ 6779068104316758833           │
    │ query               │ SELECT  l_returnflag,        ↵│
    │                     │         l_linestatus,        ↵│
    │                     │         l_quantity,          ↵│
    │                     │         l_extendedprice,     ↵│
    │                     │         l_discount,          ↵│
    │                     │         l_tax                ↵│
    │                     │FROM  lineitem                ↵│
    │                     │WHERE  l_shipdate <= date $1│
    │ calls               │ 1                             │
    │ total_time          │ 299.969983                    │
    │ min_time            │ 299.969983                    │
    │ max_time            │ 299.969983                    │
    │ mean_time           │ 299.969983                    │
    │ stddev_time         │ 0                             │
    │ rows                │ 392164                        │
    │ shared_blks_hit     │ 0                             │
    │ shared_blks_read    │ 0                             │
    │ shared_blks_dirtied │ 0                             │
    │ shared_blks_written │ 0                             │
    │ local_blks_hit      │ 0                             │
    │ local_blks_read     │ 0                             │
    │ local_blks_dirtied  │ 0                             │
    │ local_blks_written  │ 0                             │
    │ temp_blks_read      │ 0                             │
    │ temp_blks_written   │ 0                             │
    │ blk_read_time       │ 0                             │
    │ blk_write_time      │ 0                             │
    │ user_id             │ 10                            │
    │ db_id               │ 33004                         │
    │ query_id            │ 6779068104316758833           │
    │ columnar_unit_read  │ 29                            │
    │ page_read           │ 115662                        │
    │ rows_filtered       │ 0                             │
    │ columnar_scan_time  │ 0                             │
    └─────────────────────┴───────────────────────────────┘
    

Ver estatísticas de consulta colunar na UI da Web

Depois de ativar a extensão pg_stat_statements, também é possível inspecionar as estatísticas de execução de consultas colunares na interface do usuário da Web do AlloyDB Omni:

  1. Conecte-se à interface da Web e selecione o cluster.
  2. No menu de navegação, clique em Mecanismo colunar.
  3. Na tabela Consultas colunares, analise as estatísticas de execução das consultas analíticas que usaram o armazenamento de colunas:
    • ID da consulta: o identificador da consulta limpa.
    • Consulta: o texto da instrução SQL limpo, com valores constantes substituídos por marcadores de posição.
    • Horários chamados: o número de vezes que a consulta foi executada.
    • Média de linhas buscadas: o número médio de linhas retornadas por execução.
    • Latência média: a latência média de execução da consulta.
    • Latência máxima: a latência máxima de execução registrada para a consulta.
    • Unidade colunar lida: o número de unidades colunares lidas do armazenamento de colunas.
    • Páginas lidas: o número de páginas lidas durante a execução.

Ver o uso da memória do repositório de colunas

Para ver a quantidade de RAM não utilizada disponível para o mecanismo colunar, consulte a função google_columnar_engine_memory_available. O número inteiro de saída mostra a memória disponível em megabytes (MB).

SELECT google_columnar_engine_memory_available();

Ver o tamanho e as configurações da memória do repositório de colunas na UI da Web

Também é possível verificar o consumo de memória do armazenamento de colunas e as definições de configuração na interface do usuário da Web do AlloyDB Omni:

  1. Conecte-se à interface da Web e selecione o cluster.
  2. No menu de navegação, clique em Mecanismo colunar.
  3. Revise a seção Configurações do armazenamento em colunas, que mostra os seguintes indicadores de status e memória:
    • Mecanismo colunar: indica se o mecanismo colunar está ativo (por exemplo, Enabled).
    • Tamanho da memória: mostra a quantidade de memória do armazenamento de colunas em uso em relação ao total de memória colunar alocada (por exemplo, 2.0 MB used of 1024.0 MB).
    • Colunização automática: indica se a colunização automática está ativada (por exemplo, Enabled).
    • Frequência de execução: mostra o intervalo de programação para execuções de colunização automática (por exemplo, Every 5 minutes).
    • Verificação colunar: indica se a execução da verificação colunar está ativada (por exemplo, Enabled).

Ver o cache de armazenamento do mecanismo colunar

Para visualizar e monitorar dados sobre o cache de armazenamento do mecanismo colunar, use os seguintes comandos:

Comando Descrição
SELECT google_columnar_engine_storage_cache_used(); Retorna o tamanho do cache de armazenamento do mecanismo colunar usado.
SELECT google_columnar_engine_storage_cache_available(); Retorna o tamanho do cache de armazenamento do mecanismo colunar não utilizado.
SHOW google_columnar_engine.storage_cache_size; Retorna o valor total do tamanho configurado do cache de armazenamento para o mecanismo colunar.