| Bellacosa Mainframe falando sobre performance |
💣🔥 O MAINFRAME NÃO PERDOA: 1 LINHA DE CÓDIGO PODE CUSTAR MILHARES 🔥💣
Vamos destrinchar isso no estilo Bellacosa: direto, profundo e com aquela visão de bastidor que pouca gente comenta.
🧠 Performance eom contexto real de guerra
🚀 Ajuste de Performance em Mainframe: pequenas mudanças, impacto massivo
No mundo de processamento corporativo de alto volume, a diferença entre um programa eficiente e um “pesado” não é segundos…
👉 pode significar milhares de dólares economizados em MSU (unidade que mede consumo e custo no mainframe).
Muitas vezes focamos em “funcionar”… mas esquecemos de “rodar leve”.
⚙️ Explicação — o que está POR TRÁS disso
Aqui está o ponto que muita gente subestima:
👉 Mainframe não é só CPU — é economia por instrução executada.
Cada ciclo desnecessário vira:
- 💸 mais cobrança de licença (MLC)
- 🐢 mais tempo de resposta
- 💥 risco em janelas batch
🔥 Por que isso é ainda MAIS crítico em 2026?
Mesmo com cloud híbrida dominando:
- Bancos globais ainda rodam em IBM z/OS
- DB crítico continua em IBM Db2
- Processamento massivo ainda depende de batch pesado
💡 Ou seja: o mainframe virou o coração invisível da economia digital.
E código ruim ali… custa caro TODO DIA.
💣 Análise técnica aprofundada dos pontos
1. 🗃️ DB2 Cursor mal usado = desperdício brutal
Se você faz:
SELECT * FROM CLIENTES
…mas só usa 10 registros:
👉 você está pagando por 10.000.
💡 Solução:
-
OPTIMIZE FOR n ROWS - índices corretos
- evitar full table scan
🔥 Curiosidade:
Já vi job cair de 40 minutos → 3 minutos só ajustando índice.
2. 💾 SORT vs I/O: a guerra invisível
Quando você não usa memória suficiente:
👉 o sistema escreve em disco (WORK FILES)
Resultado:
- I/O explode
- tempo de execução dispara
💡 Ajuste fino:
- REGION / MEMLIMIT
- SORTWK corretamente dimensionado
🧠 Easter egg:
SORT mal configurado pode custar MAIS CPU que o próprio programa COBOL.
3. 🔢 COMP vs COMP-3 — detalhe que vira milhões
-
COMP→ binário (rápido) -
COMP-3→ packed decimal (mais compacto, porém mais lento em cálculo)
👉 Em loops massivos:
isso vira diferença real de CPU.
💣 Regra prática:
-
cálculo intensivo → use
COMP -
armazenamento → use
COMP-3
4. ⚠️ SSRANGE — o vilão silencioso
Ótimo para debug…
PÉSSIMO em produção.
👉 Ele verifica limites de array a cada acesso.
Resultado:
- CPU explode
- performance despenca
🔥 Já vi aumento de +20% de CPU só por esquecer isso ligado.
🧨 O que ELE NÃO falou (mas deveria)
Aqui vai a camada avançada:
🧠 1. COBOL “bonito” pode ser lento
Código legível ≠ código eficiente
Ex:
- PERFORM dentro de PERFORM dentro de PERFORM
- MOVE desnecessário
- IF redundante
🧠 2. I/O é o verdadeiro inimigo
Não é CPU.
👉 É acesso a disco.
Quem domina isso:
- usa buffering
- reduz READ/WRITE
- evita datasets intermediários
🧠 3. Batch Window é política, não técnica
Se seu job estoura janela:
👉 não é só problema técnico
👉 vira problema de negócio (SLA)
💡 Exemplos reais (estilo “guerra de produção”)
-
🏦 Banco:
Um cursor sem índice → +300 MSU/dia
👉 custo mensal absurdo -
📦 Logística:
SORT mal dimensionado → job atrasava expedição
👉 impacto físico real -
💳 Cartão de crédito:
SSRANGE ligado → sistema 15% mais caro sem ninguém perceber
🧪 Easter Eggs de Mainframe 🕵️
- 🧩 Programas COBOL podem rodar MAIS RÁPIDO que Java até hoje em batch massivo
-
💣 Um único
DISPLAYem loop pode matar performance - 🧠 Muitas empresas NÃO sabem quanto custa cada programa individual
- ⚠️ O maior gargalo raramente é onde o dev acha que está
🎯 Conclusão — a verdade nua e crua
Modernizar não é só API, cloud ou DevOps.
👉 É respeitar a máquina.
No mainframe:
Eficiência não é otimização — é sobrevivência financeira.
🚀 Pergunta provocativa
Se hoje você tivesse que pagar do seu bolso o MSU do seu código…
👉 você ainda programaria do mesmo jeito?
💣🔥 CHECKLIST CIRÚRGICO DE PERFORMANCE — COBOL + DB2 (NÍVEL PRODUÇÃO) 🔥💣
Aqui não é teoria — é checklist de guerra, pra você olhar um programa e já saber onde cortar custo, CPU e tempo de execução.
🧠 1. ACESSO AO DB2 (onde mais se perde dinheiro)
🔍 Checklist rápido:
-
Existe índice cobrindo o
WHERE? -
Evita
SELECT *? -
Usa
OPTIMIZE FOR n ROWSquando necessário? -
Evita
ORDER BYdesnecessário? - Cursor está com FETCH controlado (não trazendo milhares sem uso)?
-
Usa
WITH URquando leitura suja é aceitável? -
Evita funções em colunas indexadas (
SUBSTR,UPPER, etc)?
💣 Cirurgia clássica:
SELECT * FROM CLIENTES
⬇️
SELECT NOME, CPF FROM CLIENTES
WHERE CPF = :WS-CPF
👉 Redução brutal de I/O + CPU
⚙️ 2. LOOPS COBOL (o assassino silencioso)
🔍 Checklist:
-
Existe
PERFORMdentro dePERFORMdesnecessário? - Loop depende de I/O (READ dentro de loop)?
- Variáveis são recalculadas sem necessidade?
-
Usa
EXIT PERFORMcorretamente?
💡 Dica de ouro:
👉 Tire tudo que puder de dentro do loop
💾 3. I/O (o verdadeiro vilão)
🔍 Checklist:
- Quantos READ/WRITE estão sendo feitos?
- Arquivo poderia ser processado em memória?
- Existe buffering?
- Dataset está corretamente definido (BLKSIZE, BUFNO)?
💣 Regra brutal:
1 acesso a disco ≈ milhares de instruções CPU
🔢 4. TIPOS DE DADOS (COMP vs COMP-3)
🔍 Checklist:
-
Campos de cálculo estão como
COMP? -
Campos apenas armazenados estão como
COMP-3? - Evita conversões constantes?
💡 Impacto real:
Loops matemáticos + tipo errado = CPU desnecessária
⚠️ 5. PARÂMETROS DE COMPILAÇÃO
🔍 Checklist:
-
SSRANGEestá desligado em produção? -
OPTIMIZEativo? -
NUMPROC,TRUNCcorretos?
💣 Clássico erro:
👉 esquecer SSRANGE ligado = CPU queimando dinheiro
🧮 6. SORT (onde muita gente erra feio)
🔍 Checklist:
- Está usando SORT externo em vez de COBOL?
- Memória suficiente foi alocada?
- Evita SORT desnecessário?
💡 Insight:
👉 SORT bem configurado = menos I/O + mais velocidade
🧠 7. DESIGN DO PROGRAMA
🔍 Checklist:
- Programa faz mais do que deveria?
- Existe lógica duplicada?
- Pode dividir em etapas menores?
💣 Verdade dura:
Código grande demais = difícil de otimizar
🔥 8. JCL E EXECUÇÃO
🔍 Checklist:
- REGION adequado?
- MEMLIMIT ajustado?
- Uso correto de GDG?
- Evita datasets temporários desnecessários?
📊 9. MONITORAMENTO (quem não mede, perde dinheiro)
🔍 Checklist:
- Analisou SMF / accounting?
- Usou EXPLAIN no DB2?
- Avaliou tempo CPU vs elapsed?
💡 Ferramentas típicas:
- IBM Db2 EXPLAIN
- SDSF
- IBM z/OS metrics
🧪 10. MICRO-OTIMIZAÇÕES QUE VIRAM MILHARES 💸
-
Evitar
MOVEdesnecessário -
Evitar
DISPLAYem produção - Reduzir chamadas de programa
- Evitar validações redundantes
- Usar tabelas internas corretamente
🧨 CHECK FINAL (modo produção)
Se responder NÃO pra qualquer um abaixo, tem dinheiro sendo perdido:
- Esse programa usa o mínimo de I/O possível?
- O DB2 está usando índice corretamente?
- O CPU está sendo usado de forma eficiente?
- O tempo está dentro da janela batch?
- O código foi pensado para performance ou só para funcionar?
🎯 FECHAMENTO ESTILO MAINFRAME ROOT
No mundo distribuído:
👉 você paga por servidor
No mainframe:
👉 você paga por cada instrução mal escrita