| Bellaocsa Mainframe como calcular os parametros de um dataset VSAM |
🔥 VSAM NA VIDA REAL: O segredo NÃO está no DEFINE… está nos parâmetros que quase ninguém entende
A maioria dos problemas de performance de VSAM começa aqui:
DEFINE CLUSTER(...)
💣 O problema?
Muita gente:
- copia JCL antigo
- usa RECsz “qualquer”
- coloca CI 4096 em tudo
- ignora FREESPACE
- nunca calcula crescimento
E depois pergunta:
“por que meu KSDS virou um moedor de CPU?”
🧠 O PRINCÍPIO MAIS IMPORTANTE DO VSAM
👉 VSAM é engenharia de I/O
Você NÃO está criando:
- “um arquivo”
Você está definindo:
- layout físico
- estratégia de acesso
- comportamento de crescimento
- padrão de lock
- eficiência de CPU
- uso de DASD
- quantidade de splits
🎯 PRINCIPAIS PARÂMETROS
🔹 RECSZ(average maximum)
RECSZ(avg max)
Define:
- tamanho médio
- tamanho máximo do registro
🧠 Como o VSAM usa isso
O VSAM calcula:
- quantidade de registros por CI
- espaço interno
- buffer efficiency
- split probability
💥 ERRO clássico
RECSZ(80 32760)
para registros de:
- 120 bytes
👉 Resultado:
- desperdício
- CI subutilizado
- mais I/O
🎯 Melhor prática
Fórmula Bellacosa 😄
AVG = média real
MAX = pior caso + margem
🔹 FREESPACE(CI CA)
FREESPACE(10 5)
Reserva espaço:
- dentro do CI
- dentro do CA
🧠 Objetivo
Evitar:
- CI splits
- CA splits
💣 REGRA DE OURO
🔥 Muito insert aleatório?
Use:
FREESPACE(20 10)
🔥 Dataset quase estático?
Use:
FREESPACE(0 0)
💥 O que acontece se errar
| Problema | Resultado |
|---|---|
| pouco freespace | muitos splits |
| freespace excessivo | desperdício DASD |
| CA pequeno | fragmentação |
🔹 CISZ(number)
CISZ(4096)
Define tamanho do:
- Control Interval
🧠 O parâmetro MAIS importante do VSAM
Ele impacta:
- CPU
- I/O
- cache
- buffering
- throughput
🎯 REGRA prática
| Tipo de workload | CI ideal |
|---|---|
| OLTP/CICS | 4096 |
| Batch sequencial | 8192 ou 16384 |
| Muito insert | 4096 |
| LDS/DB2 | 8192+ |
💣 ERRO clássico
CI enorme em CICS:
CISZ(32768)
👉 Resultado:
- lock maior
- mais wait
- pior latência
🔹 KEYS(length offset)
KEYS(20 0)
Somente:
- KSDS
- AIX
🧠 Explicação
| Item | Significado |
|---|---|
| length | tamanho da chave |
| offset | posição da chave |
Exemplo COBOL
01 REG.
05 ID PIC X(10).
05 NOME PIC X(40).
👉 então:
KEYS(10 0)
💥 Dica Bellacosa
Nunca use:
- chave enorme
- chave variável
- chave não seletiva
👉 índice explode
👉 CPU sobe
🔹 READPW / UPDATEPW
Proteção antiga VSAM.
Hoje:
- RACF domina tudo
👉 raramente usado.
🔹 FOR(days) / TO(date)
Retention period.
Exemplo
FOR(30)
Mantém dataset:
- protegido 30 dias
🔹 REUSE / NOREUSE
REUSE
Permite reutilização do cluster:
REUSE
Muito usado em:
- arquivos temporários
- batch diário
NOREUSE
Requer DELETE/DEFINE.
Mais seguro.
🚀 ALGORITMO REAL DE DEFINIÇÃO VSAM
Agora vem a parte de sysprog senior 👊
🟢 KSDS (OLTP/CICS)
Características
- insert aleatório
- update
- alta concorrência
Fórmula recomendada
CI = 4096
FREESPACE = 20 10
Algoritmo
1. calcular tamanho médio
2. calcular inserts/dia
3. calcular crescimento mensal
4. estimar splits
5. reservar freespace
6. ajustar buffers
🔵 ESDS
Características
- append-only
- sequencial
Melhor configuração
FREESPACE(0 0)
CISZ(8192)
Por quê?
👉 Não existe insert interno.
🟡 RRDS
Características
- slots fixos
- acesso relativo
Melhor configuração
RECSZ fixo
CI alinhado com quantidade de slots
Fórmula
CI = slot_size × quantidade ideal por CI
🟠 VRRDS
Mais complexo.
Melhor prática
FREESPACE(15 10)
Porque:
- registros crescem
🟣 LDS
Sem registros.
Melhor configuração
CISZ(8192 ou 16384)
Porque DB2 gosta disso?
👉 melhor throughput sequencial
⚫ VSAMDB / NoSQL VSAM
(CouchDB-like engines, key-value engines, híbridos)
Melhor prática
CI grande
buffer agressivo
freespace moderado
🧠 O VERDADEIRO SEGREDO
A melhor configuração depende de:
| Fator | Impacto |
|---|---|
| padrão de insert | splits |
| concorrência | lock |
| tamanho do registro | CI |
| crescimento | CA |
| batch vs online | buffers |
| DASD/cache | throughput |
💥 EXEMPLO REAL (CICS bancário)
DEFINE CLUSTER -
(NAME(BANK.CLIENT.KSDS)) -
RECSZ(300 500) -
KEYS(20 0) -
CISZ(4096) -
FREESPACE(20 10) -
SHAREOPTIONS(3 3)
👉 otimizado para:
- alta concorrência
- update intenso
- baixo split
🚨 SINAIS DE VSAM MAL DEFINIDO
✔ muitos CI splits
✔ aumento de EXCP
✔ CPU crescendo
✔ buffer hit ratio ruim
✔ CA fragmentation
✔ batch lento
✔ CICS wait
🎯 REGRA FINAL DO BELLACOSA MAINFRAME 😄
“VSAM rápido não nasce no COBOL.
Ele nasce no DEFINE CLUSTER.”