| 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
| Tipo | Impacto |
|---|---|
| Index scan | Rápido ⚡ |
| Table scan | Lento 🐢 |
| Nested loop | Bom |
| Sort | Custo 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”
Sem comentários:
Enviar um comentário