☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

sexta-feira, 23 de janeiro de 2026

💥 DB2 - CENÁRIO: CPU EXPLODINDO EM PRODUÇÃO

 

Bellacosa Mainframe estudo do caso CPU Explodindo

💥 DB2 - CENÁRIO: CPU EXPLODINDO EM PRODUÇÃO

🧪 Situação

  • Batch rodando há anos
  • De repente: ⬆ CPU / ⬆ elapsed time
  • Usuários reclamando
  • SLA estourando

⚠️ QUERY PROBLEMÁTICA

SELECT *
FROM VAGNER.PEDIDOS P
JOIN VAGNER.CLIENTES C
ON P.CLIENTE_ID = C.ID
WHERE C.CIDADE = 'SAO PAULO';

💣 SINTOMAS

  • CPU alto 🔥
  • Long elapsed time
  • I/O elevado
  • Threads presas

🔍 PASSO 1 — EXPLAIN (descobrindo o vilão)

👉 Você roda EXPLAIN e vê:

ACCESSTYPE = R (TABLE SCAN)
METHOD = 1 (Nested Loop)
MATCHCOLS = 0

🧠 DIAGNÓSTICO

💥 Problemas identificados:

  1. Sem índice em C.CIDADE
  2. Join usando nested loop pesado
  3. Alto volume de leitura
  4. SELECT * (puxa dados desnecessários)

🚨 CAUSA REAL DO CPU ALTO

👉 Db2 está:

  • Varredura completa (scan)
  • Fazendo join linha a linha
  • Lendo MUITO mais dados que precisa

💡 Tradução:

Está trabalhando demais pra responder pouco


🚀 PASSO 2 — CORREÇÃO (TUNING REAL)

🔹 1. Criar índice estratégico

CREATE INDEX IDX_CLIENTES_CIDADE
ON VAGNER.CLIENTES (CIDADE);

🔹 2. Índice para JOIN

CREATE INDEX IDX_PEDIDOS_CLIENTE
ON VAGNER.PEDIDOS (CLIENTE_ID);

🔹 3. Evitar SELECT *

SELECT P.ID, C.NOME
FROM VAGNER.PEDIDOS P
JOIN VAGNER.CLIENTES C
ON P.CLIENTE_ID = C.ID
WHERE C.CIDADE = 'SAO PAULO';

🔹 4. Atualizar estatísticas

RUNSTATS TABLESPACE VAGNER.TSCLIENTES;
RUNSTATS TABLESPACE VAGNER.TSPEDIDOS;

🔁 PASSO 3 — NOVO EXPLAIN

Agora você vê:

ACCESSTYPE = I
MATCHCOLS > 0
METHOD = melhor otimizado

📊 RESULTADO REAL

MétricaAntesDepois
CPU🔥 Alto⚡ Baixo
Tempo🐢 Lento🚀 Rápido
I/OAltoReduzido

💣 OUTROS CENÁRIOS DE CPU ALTO (VIDA REAL)

⚠️ 1. Falta de filtro

SELECT * FROM PEDIDOS;

👉 Scan total = CPU alto


⚠️ 2. Função no WHERE

WHERE UPPER(NOME) = 'ANA'

👉 Índice ignorado 😬


⚠️ 3. OR mal usado

WHERE CIDADE = 'SP' OR CIDADE = 'RJ'

👉 Pode quebrar índice


⚠️ 4. RUNSTATS desatualizado

👉 Otimizador toma decisão ruim


⚠️ 5. Índice errado

👉 Existe… mas não ajuda


🧠 CHECKLIST DE INCIDENTE (use isso na guerra)

Quando CPU subir:

✔ Rodar EXPLAIN
✔ Ver ACCESSTYPE
✔ Checar índices
✔ Ver RUNSTATS
✔ Analisar SELECT *
✔ Avaliar volume de dados


🔥 FERRAMENTAS QUE AJUDAM

  • EXPLAIN / PLAN_TABLE
  • IFCID 316 (performance)
  • Monitor tipo OMEGAMON
  • Accounting traces

😎 FRASES DE QUEM RESOLVE INCIDENTE

  • “Isso tá fazendo tablespace scan”
  • “O access path mudou”
  • “Faltou índice nesse predicado”
  • “RUNSTATS tá velho”

💥 MENTALIDADE FINAL

👉 CPU alto no Db2 quase nunca é “o mainframe lento”

👉 Normalmente é:

✔ SQL ruim
✔ Índice errado
✔ Estatística desatualizada

☕ Gostou deste café?
Siga o Bellacosa Mainframe e acompanhe os próximos artigos.
SEGUIR O BLOG

Sem comentários:

Enviar um comentário

De Fã para Fã. Conteúdo não oficial produzido como homenagem, comentário, análise ou paródia. Personagens, marcas e obras eventualmente mencionados pertencem aos seus respectivos titulares.
Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...