| Bellacosa Mainframe apresenta IBM Mainframe DB2 Runstats |
🔷 RUNSTATS no DB2: Mantendo Estatísticas Sempre Frescas
No DB2 para IBM z/OS, RUNSTATS é a ferramenta que mantém o otimizador de consultas informado sobre os dados. Sem estatísticas precisas, o DB2 não consegue criar planos de execução eficientes, e suas queries podem ficar lentas ou pesadas.
🕰️ História e Origem
-
Nos anos 80, com bancos de dados relacionais massivos da IBM, surgiu a necessidade de coletar informações sobre o volume e distribuição dos dados.
-
O DB2 precisava de uma forma de “aprender” sobre tabelas e índices:
-
Quantas linhas existem
-
Quantas páginas são ocupadas
-
Distribuição dos valores em colunas
-
-
Assim nasceu o RUNSTATS, permitindo que o otimizador de consultas escolha o melhor caminho de acesso.
Pense no RUNSTATS como alimentar o cérebro do DB2 para que ele saiba onde estão os dados e como acessá-los mais rápido.
⚙️ O que o RUNSTATS faz?
O RUNSTATS coleta estatísticas sobre tabelas e índices, incluindo:
-
Número de linhas
-
Número de páginas (clusters e extent)
-
Distribuição de valores em colunas (histogramas)
-
Número de valores distintos
-
Estatísticas de índice
Essas informações são usadas pelo otimizador DB2 para criar o plano de execução mais eficiente para SELECTs, JOINs e outras operações.
🔹 Sintaxe básica
-
TABLE(nome_tabela)→ a tabela alvo -
INDEXES ALL→ coleta estatísticas de todos os índices da tabela -
Pode ser executado em batch ou online, dependendo da criticalidade
🔹 Opções comuns
-
ON ALL COLUMNS → coleta histograma de todas as colunas
-
ON COLUMNS (col1, col2) → coleta histograma apenas de colunas importantes
-
WITH DISTRIBUTION ON → útil para colunas usadas em joins ou WHERE
💡 Dicas Bellacosa
-
Rodar periodicamente → especialmente depois de grandes INSERTs/UPDATEs/DELETEs
-
Priorizar colunas usadas em WHERE/JOIN → reduz custo de coleta de estatísticas
-
Evite RUNSTATS durante pico de produção → pode causar I/O extra
-
Use COPY + RUNSTATS em DB2 online → mantém performance sem travar aplicações
-
Sempre verifique os planos de execução → o RUNSTATS influencia diretamente o
EXPLAIN PLAN.
🔍 Curiosidades e Easter Eggs
-
O RUNSTATS não altera dados, apenas coleta informações.
-
Alguns DBAs brincam que “RUNSTATS é como fazer checkup anual no seu banco de dados” — sem ele, você dirige no escuro.
-
Se você fizer uma reorganização (
REORG) e não rodar RUNSTATS, DB2 pode subestimar ou superestimar linhas → queries lentas.
📈 Impacto na Performance
-
Consultas mais rápidas → otimizador tem informações precisas
-
JOINs e filtros eficientes → DB2 escolhe índices corretos
-
Sem RUNSTATS → DB2 pode fazer table scan em vez de index scan, desperdiçando CPU e I/O
-
Em ambientes grandes (milhões de linhas), RUNSTATS planejado e incremental é crucial
🧪 Exemplo prático
Suponha que você tenha a tabela ORDERS no DB2 z/OS:
-
DB2 coleta estatísticas de todas as colunas da tabela e de todos os índices.
-
Agora, quando você rodar:
-
O otimizador usará estatísticas precisas para escolher o melhor índice e evitar full table scan.
🔑 Resumo Bellacosa
| Conceito | Detalhe |
|---|---|
| O que é | Comando para coletar estatísticas sobre tabelas e índices |
| Sintaxe | RUNSTATS TABLESPACE ... TABLE(...) AND INDEXES ALL |
| Quando usar | Após grandes mudanças nos dados, ou periodicamente |
| Impacto | Melhora planos de execução e performance de queries |
| Dicas Bellacosa | Priorize colunas usadas em WHERE/JOIN, evite horários de pico, combine com REORG |
💡 Easter Egg:
Mesmo que você tenha todos os índices perfeitos, DB2 sem RUNSTATS é como ter mapas sem GPS — o otimizador pode escolher caminhos ruins e atrasar seu batch.