| Bellacosa Mainframe analisando o DB2 em busca de problemas |
☕🔥 DB2 z/OS — COMO IDENTIFICAR THREADS PRESOS, PROBLEMAS DE POOL, CPU, MEMÓRIA, LOG E PERFORMANCE
No Db2 Mainframe, praticamente tudo gira em torno de:
Threads
Buffer Pools
EDM Pool
Logging
Tablespaces
I/O
CPU
Storage
Rede (DDF/DRDA)
Tempo de resposta
O segredo do Sysprog/DBA é saber:
“QUAL COMANDO MOSTRA O QUE ESTÁ SOFRENDO?”
🔥 1 — IDENTIFICANDO THREADS PRESOS (HANG / LOCK / DEADLOCK)
✅ COMANDO MAIS IMPORTANTE
-DISPLAY THREAD(*)
ou resumido:
-DIS THD(*)
📌 O que ele mostra
Threads ativos
Usuário
Plano
CPU consumida
Tempo ativo
WAITs
Locks
Corrrelation ID
Workstation
DDF
CICS
Batch
✅ EXEMPLO PRÁTICO
-DIS THD(*) TYPE(ACTIVE)
Saída típica:
STATUS=WAIT
PLAN=DSNESPCS
AUTHID=APPUSER
CORRID=CICS001
ELAPSED=00:12:55
📌 Interpretação
| Campo | Significado |
|---|---|
| WAIT | Thread parada esperando |
| ELAPSED alto | Possível travamento |
| CICS001 | Região CICS origem |
| PLAN | Aplicação responsável |
🔥 Identificando lock
-DIS DATABASE(DBPAGTO) LOCKS
Exemplo
RESOURCE TYPE = PAGESET
LOCK STATE = CLAIM
📌 Isso indica
Objeto preso
Thread segurando lock
Possível contention
🔥 DEADLOCKS
-DIS THREAD(*) SERVICE(WAIT)
Procure:
STATUS=WAIT
🔥 CANCELANDO THREAD PROBLEMÁTICA
-CANCEL THREAD(token)
ou:
-CANCEL DDF THREAD(*)
Cuidado:
Pode causar rollback gigante
Pode explodir log
Pode gerar timeout em cascata
☕ 2 — PROBLEMAS EM BUFFER POOL
Bufferpool = cache de páginas do Db2.
Quando sofre:
CPU sobe
I/O explode
Tempo resposta piora
✅ COMANDO
-DISPLAY BUFFERPOOL(BP0)
ou:
-DIS BPOOL(BP0)
📌 O QUE ANALISAR
| Campo | Problema |
|---|---|
| VPSEQT | Muito alto → sequential flooding |
| HIT RATIO | Baixo → excesso de I/O |
| PREFETCH | Ineficiente |
| WRITE ENGINE | Gargalo disco |
✅ EXEMPLO
-DIS BPOOL(BP1)
Saída:
HIT RATIO = 72%
📌 Interpretação
Muito ruim.
Ideal:
| Tipo | Ideal |
|---|---|
| OLTP | > 95% |
| Batch | > 85% |
🔥 ALTERANDO BUFFERPOOL
-ALTER BUFFERPOOL(BP1) VPSIZE(200000)
📌 O que isso faz
Aumenta memória do pool.
Menos I/O.
Menos CPU.
Mais cache.
☕ 3 — PROBLEMAS EM TABLESPACE
✅ STATUS DO TABLESPACE
-DIS DATABASE(DBFIN) SPACENAM(TSPAGTO)
📌 O QUE PROCURAR
| Status | Significado |
|---|---|
| STOPP | parado |
| AREO* | advisory reorg |
| RECP | recovery pending |
| COPY | precisa COPY |
| GRECP | group recovery pending |
✅ EXEMPLO
STATUS=AREO*
📌 Interpretação
Tablespace precisa REORG.
Impactos:
Performance ruim
Overflow
Mais GETPAGE
Mais CPU
🔥 RESOLVENDO
REORG TABLESPACE DBFIN.TSPAGTO
☕ 4 — ALTO CONSUMO DE CPU
✅ THREADS CONSUMINDO CPU
-DIS THREAD(*) DETAIL
Procure:
CPU=
📌 Exemplo
CPU=000123.456
Possíveis causas
| Problema | Efeito |
|---|---|
| SQL ruim | CPU explode |
| Tablespace fragmentado | Mais GETPAGE |
| Índice errado | Table scan |
| RUNSTATS antigo | Access path ruim |
| Lock contention | Reprocessamento |
🔥 COMANDO IMPORTANTE
-DIS STATS
📌 Mostra
EDM pool
Dynamic SQL cache
RID pool
Sort
Storage
☕ 5 — ALTO CONSUMO DE MEMÓRIA (STORAGE)
✅ COMANDO
-DIS STORAGE
📌 Mostra
Above the bar
Below the bar
31-bit
64-bit
Agentes Db2
EXEMPLO
DBM1
MSTR
DIST
📌 Interpretação
| Address Space | Função |
|---|---|
| DBM1 | Buffer pools |
| MSTR | Controle |
| DIST | DDF/network |
🔥 STORAGE LEAK
Sinais:
DIST crescendo sem parar
Threads DDF não encerram
EDM saturado
☕ 6 — PROBLEMAS COM LOG DATASET
O log é o coração do recovery.
Quando sofre:
Commit lento
Rollback lento
Batch trava
CICS congela
✅ COMANDO
-DIS LOG
📌 Mostra
Active logs
Archive logs
Checkpoints
Utilização
EXEMPLO
ACTIVE LOG COPY 1
ACTIVE LOG COPY 2
📌 O QUE PROCURAR
| Problema | Sinal |
|---|---|
| Log full | archive atrasado |
| Checkpoint lento | commit lento |
| Dual logging falhando | risco recovery |
🔥 LOG SATURADO
Mensagem clássica:
DSNJ110I
ou:
ARCHIVE LOG REQUIRED
🔥 SOLUÇÃO
Mais active logs
Logs maiores
Melhor disco
Archive mais rápido
☕ 7 — TEMPO DE RESPOSTA LENTO
✅ COMANDO
-DIS THREAD(*) DETAIL
Compare:
| Campo | Interpretação |
|---|---|
| ELAPSED | tempo total |
| CPU | CPU real |
| SUSPEND | espera |
📌 EXEMPLO
ELAPSED=00:10:00
CPU=00:00:03
Interpretação
O problema NÃO é CPU.
É:
WAIT
I/O
Lock
Rede
Commit
Syncpoint
☕ 8 — PROBLEMAS DE REDE / DDF / DRDA
Muito comum hoje com:
Java
APIs
Microservices
JDBC
REST
✅ COMANDO
-DIS DDF
📌 Mostra
Threads distribuídas
TCP/IP
Localização
Status
EXEMPLO
STATUS=STARTD
🔥 THREADS DDF
-DIS THREAD(*) TYPE(SYSTEM)
📌 Procure
DIST
🔥 MUITAS CONEXÕES
Problemas:
Java pool ruim
Connection leak
Firewall timeout
Keepalive errado
☕ 9 — IDENTIFICANDO I/O EXCESSIVO
✅ COMANDO
-DIS BUFFERPOOL(BP0) DETAIL
Procure
| Campo | Significado |
|---|---|
| SYNCH READ | leitura síncrona |
| PREFETCH | leitura antecipada |
| WRITE I/O | escrita |
📌 Se SYNCH READ sobe
Significa:
Cache ruim
Índice ruim
SQL ruim
Pool pequeno
☕ 10 — COMANDOS MAIS IMPORTANTES DO DBA/SYSPROG DB2
| Objetivo | Comando |
|---|---|
| Ver threads | -DIS THREAD(*) |
| Ver locks | -DIS DB(...) LOCKS |
| Ver bufferpool | -DIS BPOOL |
| Ver log | -DIS LOG |
| Ver storage | -DIS STORAGE |
| Ver DDF | -DIS DDF |
| Ver tablespace | -DIS DB(...) SPACENAM |
| Ver utilities | -DIS UTILITY(*) |
| Ver claims/drains | -DIS DB(...) CLAIMERS |
| Ver status geral | -DIS GROUP |
☕🔥 FLUXO MENTAL DE TROUBLESHOOTING NO Db2
🚨 Usuário reclamou de lentidão
PASSO 1
-DIS THREAD(*) DETAIL
Ver:
CPU
WAIT
ELAPSED
PASSO 2
-DIS BPOOL(BP0) DETAIL
Ver:
Hit ratio
Sync I/O
PASSO 3
-DIS LOG
Ver:
Saturação
Checkpoint
PASSO 4
-DIS DB(...) LOCKS
Ver lock contention.
PASSO 5
-DIS STORAGE
Ver memory pressure.
☕🔥 SINTOMAS CLÁSSICOS E CAUSAS
| Sintoma | Possível causa |
|---|---|
| CPU alta | SQL ruim |
| ELAPSED alto | WAIT/I/O |
| Commit lento | Log |
| DIST gigante | JDBC leak |
| Lock timeout | Thread presa |
| GETPAGE alto | REORG necessário |
| Sync read alto | Pool pequeno |
| RID failure | RID pool |
| EDM cheio | Dynamic SQL excessivo |
☕🔥 O QUE OS GRANDES DBAs FAZEM
Eles sempre correlacionam:
THREAD
LOCK
BUFFERPOOL
SQL
LOG
STORAGE
DDF
Nunca analisam apenas um comando isolado.
Porque no Db2:
“O sintoma aparece em um lugar…
mas a causa real geralmente está em outro.”
Sem comentários:
Enviar um comentário