☕ 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

domingo, 18 de janeiro de 2026

💣 DB2 Troubleshotting

Bellacosa Mainframe Db2 Troubleshotting

💣 DB2 Troubleshotting

💣 1. DEADLOCK — “o abraço da morte”

🧪 Cenário real

Transação A:

UPDATE CLIENTES SET NOME='ANA' WHERE ID=1;

Transação B:

UPDATE CLIENTES SET NOME='JOAO' WHERE ID=2;

👉 Depois:

  • A tenta atualizar ID=2
  • B tenta atualizar ID=1

💥 BOOM → deadlock


🧠 O que aconteceu?

Cada transação:

  • segura um lock
  • espera o lock da outra

👉 Db2 detecta e mata uma delas


💥 Sintoma clássico

SQLCODE = -911
REASON CODE = 00C90088

🔍 Diagnóstico

  • IFCID 172 (trace)
  • DISPLAY DATABASE LOCKS
  • Monitoramento (OMEGAMON)

🛠️ Soluções

✔ Acessar tabelas sempre na mesma ordem
✔ Reduzir tempo de transação
✔ Usar COMMIT mais frequente
✔ Evitar “holding locks” por muito tempo

💡 Regra de ouro:

Ordem consistente = evita deadlock


⚠️ 2. LOCK ESCALATION — “quando o Db2 perde a paciência”

🧪 Cenário real

Você roda:

UPDATE CLIENTES SET STATUS='A';

👉 Sem WHERE 😬


🧠 O que acontece?

  • Começa com row locks
  • Muitos locks acumulam
  • Db2 sobe para table lock

💥 Resultado:

Ninguém mais acessa a tabela


💥 Sintoma

  • Lentidão geral
  • Jobs travados
  • Reclamação do usuário 😅

🔍 Diagnóstico

  • IFCID 196
  • Monitoramento de locks
  • DSNZPARM (NUMLKTS / NUMLKUS)

🛠️ Soluções

✔ Sempre usar WHERE
✔ Commit em blocos (batch)
✔ Ajustar parâmetros de lock
✔ Usar LOCKSIZE adequado

💡 Bellacosa insight:

UPDATE sem WHERE é pedido formal de incidente 🚨


🚀 3. ACCESS PATH — “o plano invisível que decide tudo”

🧪 Cenário real

SELECT * FROM CLIENTES WHERE ID = 1;

👉 Parece simples… mas:

  • Usa índice? ⚡
  • Ou faz table scan? 🐢

🧠 O que é Access Path?

👉 Caminho que o otimizador escolhe para acessar os dados


🔍 Como ver?

EXPLAIN PLAN FOR
SELECT * FROM CLIENTES WHERE ID = 1;

👉 Consulta tabela PLAN_TABLE


💥 Possibilidades

TipoImpacto
Index scanRápido ⚡
Table scanLento 🐢
Nested loopBom
SortCusto extra

🛠️ Otimização

✔ Criar índice correto
✔ Atualizar RUNSTATS
✔ Evitar SELECT *
✔ Filtrar bem no WHERE


💡 Exemplo prático

❌ Ruim:

SELECT * FROM CLIENTES;

✅ Melhor:

SELECT NOME FROM CLIENTES WHERE ID = 1;

🧠 VISÃO DE PRODUÇÃO (OURO!)

🔥 Deadlock

👉 Problema de concorrência


🔥 Lock escalation

👉 Problema de volume de locks


🔥 Access path

👉 Problema de performance


💣 CHECKLIST RÁPIDO (salva carreira)

Antes de subir para produção:

✔ Tem índice?
✔ Tem WHERE?
✔ Tem COMMIT?
✔ Rodou EXPLAIN?
✔ RUNSTATS atualizado?


😎 FRASES DE SENIOR (pra usar na daily)

  • “Isso tá com cara de access path ruim”
  • “Provavelmente lock escalation”
  • “Vamos revisar o EXPLAIN antes de mexer”
  • “Isso aí vai dar -911 em produção”
☕ 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...