Mostrar mensagens com a etiqueta estatistica. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta estatistica. Mostrar todas as mensagens

sexta-feira, 3 de julho de 2009

🔷 RUNSTATS no DB2: Mantendo Estatísticas Sempre Frescas

 

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:

  1. Número de linhas

  2. Número de páginas (clusters e extent)

  3. Distribuição de valores em colunas (histogramas)

  4. Número de valores distintos

  5. 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

RUNSTATS TABLESPACE nome_tabela TABLE(nome_tabela) AND INDEXES ALL;
  • 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

  1. Rodar periodicamente → especialmente depois de grandes INSERTs/UPDATEs/DELETEs

  2. Priorizar colunas usadas em WHERE/JOIN → reduz custo de coleta de estatísticas

  3. Evite RUNSTATS durante pico de produção → pode causar I/O extra

  4. Use COPY + RUNSTATS em DB2 online → mantém performance sem travar aplicações

  5. 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:

RUNSTATS TABLESPACE ORDSPACE TABLE(ORDERS) ON ALL COLUMNS AND INDEXES ALL;
  • DB2 coleta estatísticas de todas as colunas da tabela e de todos os índices.

  • Agora, quando você rodar:

SELECT CUSTOMERID, COUNT(*) FROM ORDERS WHERE ORDERDATE BETWEEN '2025-01-01' AND '2025-12-31' GROUP BY CUSTOMERID;
  • O otimizador usará estatísticas precisas para escolher o melhor índice e evitar full table scan.


🔑 Resumo Bellacosa

ConceitoDetalhe
O que éComando para coletar estatísticas sobre tabelas e índices
SintaxeRUNSTATS TABLESPACE ... TABLE(...) AND INDEXES ALL
Quando usarApós grandes mudanças nos dados, ou periodicamente
ImpactoMelhora planos de execução e performance de queries
Dicas BellacosaPriorize 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.