Ferramentas de Análise de Baixo Nível do PostgreSQL: Explorando Semelhanças com o Oracle BBED

Introdução ao Tópico

O Oracle BBED é uma ferramenta avançada para análise de blocos de dados. O PostgreSQL oferece um conjunto de extensões e utilitários de linha de comando que permitem realizar operações de inspeção semelhantes, embora de forma mais modular e segura.

Estrutura do Diretório de Dados

Os arquivos de dados do PostgreSQL estão organizados da seguinte forma, com parâmetros-chave como block_size = 8192 e segment_size = 1GB.

/caminho/para/dados/postgresql/16/main/
├── base/           # Arquivos dos bancos de dados
│   ├── 1/          # template1
│   ├── 4/          # template0
│   ├── 5/          # postgres
│   └── 16448/      # Banco de dados do usuário
├── global/         # Tabelas do sistema compartilhadas
├── pg_wal/         # Logs de WAL
├── pg_tblspc/      # Links de tablespace
└── pg_xact/        # Estado de commit de transações

Composição Interna de uma Página

Cada página de 8KB no PostgreSQL contém um cabeçalho, ponteiros para itens, espaço livre, tuplas e um espaço especial para índices. O cabeçalho da página tem 24 bytes e inclui campos como pd_lsn e pd_checksum.

Deslocamento Campo Tamanho Descrição
0-7 pd_lsn 8 bytes Última posição WAL modificada
8-9 pd_checksum 2 bytes Soma de verificação da página
10-15 pd_lower / pd_upper 2 bytes cada Limites do espaço livre
16-17 pd_special 2 bytes Início do espaço especial
18-19 pd_pagesize_version 2 bytes Tamanho e versão da página
20-23 pd_prune_xid 4 bytes XID mais antigo para possível pruning

Utilizando a Extensão pageinspect

Para instalar a extensão e realizar análises deatlhadas das páginas:

-- Criar a extensão
CREATE EXTENSION IF NOT EXISTS pageinspect;

-- Encontrar o caminho do arquivo para uma tabela
SELECT pg_relation_filepath('tabela_teste'::regclass);

-- Analisar o cabeçalho da página
SELECT * FROM page_header(get_raw_page('tabela_teste', 0));

A saída mostra detalhes como LSN, flags e limites de espaço. Para examinar as tuplas:

-- Listar itens na página
SELECT 
    lp_num AS item_number,
    lp_offset AS posicao,
    lp_len AS tamanho,
    xmin_trans AS xmin,
    xmax_trans AS xmax,
    ctid_tuple AS ctid
FROM heap_page_items(get_raw_page('tabela_teste', 0));

Esta extensão também permite inspecionar índices B-tree com funções como bt_page_stats e bt_page_items.

Análise de Logs WAL com pg_waldump

O utilitário pg_waldump permite visualizar operações registradas nos logs de WAL. Exemplo de uso:

# Exibir conteúdo de um arquivo WAL
pg_waldump /caminho/para/pg_wal/000000010000000000000006

# Filtrar por intervalo LSN
pg_waldump -s 0/6BE4758 -e 0/6BE4800 /caminho/para/wal

# Filtrar por relação específica
pg_waldump -r 1663/16448/16450 /caminho/para/wal

A saída inclui campos como gerenciador de recursos, tamanho do registro e descrição da operação.

Estatísticas Físicas com pgstattuple

Instale a extensão e use funções para obter métricas do armazenamento:

CREATE EXTENSION IF NOT EXISTS pgstattuple;

-- Estatísticas da tabela
SELECT * FROM pgstattuple('tabela_teste');

-- Estatísticas de índice
SELECT * FROM pgstatindex('idx_nome_teste');

Estas funções fornecem informações sobre contagem de tuplas, espaço livre e fragmentação.

Visualização de Dados Brutos

Ferramentas do sistema como hexdump podem ser usadas para inspecionar arquivos diretamente:

# Visualizar início do arquivo de dados
sudo hexdump -C /caminho/para/dados/postgresql/16/main/base/16448/16450 | head -40

# Extrair bytes específicos, como pd_lsn
sudo od -A x -t x1 -N 8 /caminho/para/arquivo_de_dados

Isso ajuda a verificar a integridade dos dados em nível bruto.

Comparação com Oracle BBED

Funcionalidade Oracle BBED Ferramentas PostgreSQL
Exibir bloco de dados SET BLOCK page_header(get_raw_page())
Exibir cabeçalho MAP page_header()
Exibir tuplas DUMP heap_page_items()
Análise de WAL LogMiner pg_waldump
Verificação de checksum SUM APPLY page_checksum()
Modificação de dados MODIFY Não recomendado

As ferramentas do PostgreSQL oferecem uma abordagem mais segura e baseada em SQL, sem suporte nativo para edição direta de blocos.

Ferramentas Disponíveis no PostgreSQL

Utilitários Internos

  • pg_waldump: Análise de logs WAL
  • pg_controldata: Informações do arquivo de controle
  • pg_checksums: Verificação de checksum de dados
  • pg_resetwal: Redefinição de WAL

Extensões Internas

  • pageinspect: Análise de conteúdo de páginas
  • pgstattuple: Estatísticas físicas de tabelas
  • pg_walinspect: Aálise de conteúdo WAL (a partir do PG15)

Ferramentas de Terceiros

  • pg_filedump: Ferramenta para despejo de arquivos
  • wal-g: Gerenciamento de arquivamento de WAL

Tags: postgresql pageinspect pg_waldump pgstattuple Oracle BBED

Publicado em 7-16 12:43