| Bellacosa Mainframe erros silenciosos no VSAM e cabum no sistema |
⚠️ O Erro Silencioso em VSAM: Como Escolher KSDS vs ESDS vs RRDS Pode Derrubar Seu Sistema (Sem Você Perceber)
🔥 KSDS vs ESDS vs RRDS — A visão que só aparece em produção
🧠 Primeiro: o erro clássico
Muita gente aprende assim:
- KSDS = com chave
- ESDS = sequencial
- RRDS = relativo
👉 Isso é tecnicamente correto…
👉 Mas arquiteturalmente incompleto
A decisão real é:
Como o sistema acessa, cresce e evolui ao longo do tempo?
🟦 1. KSDS (Key-Sequenced Data Set) — O “DB2 simplificado”
💡 O que ele realmente é
Um KSDS é basicamente um índice + dados organizados por chave.
👉 Pense como:
- “mini banco de dados”
- com acesso direto via índice
📌 Quando ele brilha (vida real)
✔ Sistemas OLTP (CICS principalmente)
✔ Lookup online em alta frequência
✔ Dados vivos (update/delete constantes)
🏦 Exemplo real (CICS bancário)
Arquivo: ACCT-MASTER (KSDS)
Chave: ACCOUNT-NUMBER
CICS READ FILE('ACCT') RIDFLD(WS-ACC)
👉 Aqui não existe “loop”
👉 É acesso direto → milissegundos
⚙️ Internamente (ponto que poucos exploram)
- CI (Control Interval)
- CA (Control Area)
- Índice B-tree
Quando você faz INSERT fora de ordem:
👉 💥 CI SPLIT
👉 💥 CA SPLIT
🚨 Problema clássico de produção
Sistema crescendo + inserts aleatórios:
- aumento de I/O
- fragmentação
- queda de performance
🔧 Solução clássica
//REORG EXEC PGM=IDCAMS
//SYSIN DD *
REPRO INFILE(IN) OUTFILE(OUT)
/*
👉 Rebalanceia tudo
👉 Melhora locality de acesso
🧠 Insight avançado
Se você vê:
-
KSDS com 90% inserts sequenciais
👉 talvez ESDS fosse melhor
🟨 2. ESDS (Entry-Sequenced Data Set) — O “log natural”
💡 O que ele realmente é
Um ESDS é:
“append-only storage com endereço físico (RBA)”
📌 Quando ele brilha
✔ Batch pesado
✔ Logs
✔ Trilhas de auditoria
✔ Streaming de eventos
🧾 Exemplo real
Arquivo: TRANS-LOG (ESDS)
WRITE REGISTRO
WRITE REGISTRO
WRITE REGISTRO
👉 Sempre no final
👉 Sem reorganização de chave
🚀 Por que ele é rápido?
- Sem index
- Sem split
- Escrita linear
👉 É praticamente I/O sequencial puro
⚠️ Limitação crítica
Você não faz:
READ WHERE ID = X
👉 Você precisa:
-
RBA (posição física)
ou - ler sequencialmente
🔥 Caso real (erro clássico)
Projeto usando KSDS para log:
- CI split constante
- alto consumo de CPU
👉 Troca para ESDS:
- batch caiu de 2h → 40 min
🧠 Insight avançado
ESDS é perfeito para:
👉 event sourcing no mainframe
(sim, isso existe e funciona muito bem)
🟥 3. RRDS (Relative Record Data Set) — O “array do mainframe”
💡 O que ele realmente é
Um RRDS é:
“um vetor indexado por posição (RRN)”
📌 Quando ele brilha
✔ Tabelas fixas
✔ Configuração
✔ Lookup ultra rápido sem chave
🧾 Exemplo real
RRN 1 → Config geral
RRN 2 → Limites
RRN 3 → Parâmetros regionais
Código:
READ FILE RRDS-FILE
RECORD NUMBER IS WS-RRN
👉 Acesso direto
👉 Sem índice
👉 Sem busca
⚡ Performance
- O(1) direto
- extremamente previsível
⚠️ Problemas
❌ Espaço desperdiçado
❌ Não escala bem
❌ Difícil de evoluir
🔥 Caso real
RRDS com 10.000 slots
Uso real: 300
👉 97% vazio
👉 storage desperdiçado
🧠 Insight avançado
RRDS é ótimo quando:
👉 você quer comportamento determinístico (tipo tabela estática em memória)
⚖️ Comparação prática (nível arquiteto)
| Critério | KSDS | ESDS | RRDS |
|---|---|---|---|
| Acesso por chave | ✅ | ❌ | ❌ |
| Acesso sequencial | ✅ | ✅ | ❌ |
| Acesso direto | ✅ | via RBA | via RRN |
| Insert | médio | 🔥 rápido | fixo |
| Update | ✅ | ⚠️ difícil | limitado |
| Espaço | eficiente | eficiente | ❌ pode desperdiçar |
| Complexidade | média | baixa | baixa |
🧠 Decisão real (mentalidade de produção)
✔ Use KSDS quando:
👉 O negócio fala em ID, chave, busca direta
✔ Use ESDS quando:
👉 O sistema fala em log, trilha, histórico, append
✔ Use RRDS quando:
👉 O sistema fala em posição fixa, tabela estática
🔥 O insight que separa júnior de sênior
VSAM não é sobre “tipo de arquivo”
É sobre padrão de acesso + comportamento do dado
🚨 Anti-patterns clássicos
❌ KSDS para log
❌ ESDS para lookup
❌ RRDS para dados dinâmicos
💥 Extra (nível especialista)
🔄 Combinações reais em sistemas grandes
- KSDS → dados ativos
- ESDS → histórico/log
- RRDS → parâmetros
👉 Isso é MUITO comum em sistemas CICS/Batch
Sem comentários:
Enviar um comentário