Translate

Mostrar mensagens com a etiqueta index. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta index. Mostrar todas as mensagens

sexta-feira, 10 de abril de 2026

🔥 VSAM NÃO MORREU — ELE SÓ ESTÁ RODANDO EM PRODUÇÃO HÁ 40 ANOS SEM ABEND

 

Bellacosa Mainframe com uma overview do Dataset VSAM no z/os

🔥 VSAM NÃO MORREU — ELE SÓ ESTÁ RODANDO EM PRODUÇÃO HÁ 40 ANOS SEM ABEND

🧠 O Segredo Mais Subestimado do z/OS (e por que você ainda depende dele)

Se você é desenvolvedor COBOL raiz, daqueles que já viram JCL com mais linhas que romance russo, então sabe: VSAM não é só storage… é infraestrutura crítica disfarçada de dataset.

Enquanto o mundo fala de NoSQL, Data Lakes e Kubernetes, lá no coração do IBM z/OS, o VSAM continua firme, resiliente… e silenciosamente essencial.


🧬 Origem: quando performance era questão de sobrevivência

O VSAM nasceu nos anos 60 com o OS/VS, evoluindo até o que conhecemos hoje no z/OS. Ele foi criado para resolver limitações dos métodos antigos (ISAM principalmente), trazendo:

  • Acesso indexado eficiente
  • Gerenciamento automático de espaço
  • Alta performance com grandes volumes

👉 Em outras palavras: VSAM foi o “Db2” antes do Db2 existir.


🚀 Versão atual relevante

Hoje, estamos na linha do:

👉 z/OS 3.x (como 3.1, 3.2, etc.)

E isso significa:

✔ VSAM atualizado automaticamente
✔ Melhorias de performance
✔ Integração com DFSMS
✔ Suporte a grandes volumes (EAV / Extended Addressability)



⚙️ O que evoluiu no VSAM ao longo do tempo

Mesmo sem “versão própria”, ele evoluiu MUITO:

🔹 Extended Addressability (EA)

  • Saiu do limite de GB → foi para TB

🔹 RLS (Record Level Sharing)

  • Concorrência real (quase “transacional”)

🔹 DFSMS

  • Gerenciamento automático (ACS routines)

🔹 Buffering avançado

  • Performance tuning muito mais fino

🧱 Onde o VSAM vive hoje

VSAM não é só “arquivo COBOL”:

👉 Ele é base de coisas grandes, como:

  • IBM Db2 for z/OS (usa LDS por baixo)
  • Catálogo do sistema
  • Sistemas críticos bancários

💥 Ou seja:
Mesmo que você “não use VSAM”… você usa.


⚠️ Erro comum de iniciante (e até de sênior distraído)

Perguntar:

“Qual versão do VSAM estamos usando?”

👉 A pergunta correta é:

“Qual versão do z/OS estamos rodando?”


🗂️ Tipos de Arquivos VSAM (o coração da arquitetura)

🔑 KSDS — Key Sequenced Data Set (o rei do pedaço)

  • Acesso por chave (PRIMARY KEY raiz do COBOL)
  • Possui INDEX + DATA
  • Suporta acesso sequencial e direto

💬 Comentário Bellacosa:
Se VSAM fosse banco de dados, o KSDS seria o OLTP raiz.


📦 ESDS — Entry Sequenced Data Set

  • Registros gravados em ordem de entrada
  • Sem chave
  • Acesso via RBA (Relative Byte Address)

💬 Uso clássico: logs, trilhas de auditoria, arquivos append-only


🔢 RRDS — Relative Record Data Set

  • Acesso via número relativo (RRN)
  • Pode ter slots vazios
  • Pode ser FIXED ou VARIABLE

💬 Parece simples… até você esquecer que tem slot vazio e dar READ errado 😅


🧱 LDS — Linear Data Set


  • Sem estrutura lógica de registros
  • Usado por sistemas como IBM Db2 for z/OS
  • Base para tablespaces

💬 Aqui o VSAM vira “infra invisível”



⚙️ IDCAMS — O canivete suíço do VSAM

Se você nunca digitou isso, você não viveu:

//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER(NAME(MEU.KSDS)
INDEXED
KEYS(10 0)
RECORDSIZE(80 80)
CYLINDERS(5 2))
/*

📌 Com o IDCAMS você:

  • DEFINE / DELETE / ALTER
  • REPRO (ETL raiz do mainframe)
  • LISTCAT (o “SELECT * FROM VSAM”)

💬 Curiosidade:
O REPRO já fazia “data migration” décadas antes do termo existir.


🧠 Curiosidades que só quem viveu sabe

  • VSAM usa Control Interval (CI) e Control Area (CA) — tuning fino de performance
  • Split de CI/CA pode causar degradação se mal dimensionado
  • Buffer tuning pode mudar completamente o desempenho
  • SHAREOPTIONS define concorrência (e dor de cabeça 😄)

📊 VSAM vs SQL (Db2): o choque de paradigmas

VSAMDb2
NavegacionalDeclarativo
Ultra rápidoFlexível
Sem overheadCom engine
Controle manualAutomação

👉 Hoje, o IBM Db2 for z/OS usa VSAM (LDS) por baixo.

💥 Plot twist: Você acha que saiu do VSAM… mas nunca saiu.


🧮 Limitações e características técnicas

  • Máx. tamanho: até dezenas de TB (dependendo do tipo e configuração)
  • Máx. keys:
    • 1 chave primária
    • múltiplos AIX (Alternate Indexes)
  • Máx. tamanho de registro: ~32KB
  • CI tamanho: 512 bytes até 32KB
  • CA: múltiplos de CI

📌 Limitação real não é técnica — é governança e design


🧷 Pontos Fortes

✅ Performance absurda (baixo overhead)
✅ Estabilidade lendária
✅ Controle fino
✅ Ideal para batch massivo


⚠️ Pontos Fracos

❌ Complexidade operacional
❌ Curva de aprendizado alta
❌ Sem SQL nativo
❌ Manutenção manual (splits, tuning)


🧪 Exemplo COBOL clássico (KSDS)

READ MEU-KSDS
KEY IS WS-CHAVE
INVALID KEY
DISPLAY 'NAO ENCONTRADO'
END-READ.

💬 Simples. Direto. Sem ORM. Sem mágica.


🚀 Versões atuais e evolução

VSAM continua sendo parte essencial do IBM z/OS (versões atuais como 3.x).

E evoluiu com:

  • RLS (Record Level Sharing)
  • DFSMS integração
  • Melhorias de cache e buffering

📦 📊 Tamanho máximo de um VSAM (na prática e na teoria)

No IBM z/OS, o tamanho de um dataset VSAM não é um único número fixo — ele depende de:

  • Tipo do VSAM (KSDS, ESDS, RRDS, LDS)
  • Tamanho do CI (Control Interval)
  • Quantidade de CA (Control Areas)
  • Limitações do volume (DASD)
  • SMS / DFSMS


🧠 💥 Resposta direta (o número que você quer)

👉 Um VSAM pode chegar a dezenas de TERABYTES

📌 Valores típicos modernos:

  • Até ~128 TB por dataset (em ambientes modernos com Extended Addressability)
  • Limitado principalmente pelo volume e configuração SMS

⚙️ 🔍 O que define esse limite?

1. 📦 Extended Addressability (EA)

Sem isso, você está preso ao passado.

  • VSAM clássico: ~4 GB limite antigo
  • VSAM com EA: escala para terabytes

💬 Se não tem EA habilitado → você está vivendo em 1985


2. 🧱 Control Areas (CA) e Control Intervals (CI)

  • CI: até 32 KB
  • CA: conjunto de CIs
  • Total = CI × quantidade de CAs

👉 O VSAM cresce horizontalmente via CAs


3. 💽 Limite físico do DASD

Mesmo que o VSAM suporte muito:

  • Seu volume pode limitar (3390, EAV, etc.)
  • Multi-volume entra em jogo

🗂️ 📊 Por tipo de VSAM

TipoTamanho Máximo
KSDSAté dezenas de TB
ESDS         Similar ao KSDS
RRDSLimitado por slots
LDSPode chegar a tamanhos enormes (base do Db2)

💬 LDS é o campeão pesado, porque é usado por IBM Db2 for z/OS


⚠️ 🚨 Limitações reais (as que doem em produção)

Não é o “máximo teórico” que quebra você… é isso aqui:

  • CI mal dimensionado → splits constantes
  • CA splits → degradação absurda
  • AIX mal planejado → performance despenca
  • Buffer tuning errado → gargalo invisível

💥 Ou seja:
👉 Você raramente quebra por tamanho — quebra por design


🧪 💡 Resumo estilo Bellacosa

👉 Teoricamente:
VSAM é gigante (TBs)

👉 Na prática:
Seu VSAM vai até onde seu projeto aguenta


☕ 🔥 Provocação final

Você está preocupado com o tamanho máximo…

…mas já olhou quantos CA splits seu KSDS teve hoje? 😏


🔑 Quantos AIX (Alternate Indexes) um KSDS pode ter?

IBM z/OS

💥 Resposta direta:

Até 255 Alternate Indexes (AIX)


🧠 Mas calma… isso é o limite TEÓRICO

Na prática, você raramente — quase nunca — chega perto disso.


⚙️ Como isso funciona por baixo dos panos

Cada AIX é:

  • Um VSAM KSDS separado
  • Com seu próprio INDEX + DATA
  • Ligado ao cluster base via PATH

👉 Ou seja:


Você não tem “um arquivo com vários índices”


Você tem vários datasets VSAM interligados


🧱 Estrutura lógica

BASE CLUSTER (KSDS)

├── AIX 1
├── AIX 2
├── AIX 3
└── ...

Cada AIX:

  • Pode ter chave diferente
  • Pode permitir duplicidade (ou não)
  • Pode ter upgrade automático (ou não)

⚠️ 🚨 Limitações reais (as que ferram em produção)

Aqui está o que ninguém te conta:

1. 🔥 Overhead de UPDATE

Cada WRITE/REWRITE no KSDS:

👉 Atualiza TODOS os AIX associados

💥 Resultado:

  • I/O explode
  • CPU sobe
  • Batch começa a sofrer

2. 🧨 Risco de inconsistência

Se você não usar:

  • UPGRADE
  • PATH corretamente definido

👉 Pode ficar com AIX desatualizado


3. 🐌 Performance degradada

Quanto mais AIX:

  • Mais lookup indireto
  • Mais leitura de INDEX
  • Mais complexidade

4. 💽 Espaço em disco

Cada AIX = outro VSAM

👉 10 AIX ≠ leve

👉 50 AIX = você criou um “pseudo-DB maluco”


📊 Regra de ouro (mundo real)

Quantidade de AIXSituação
1–3👍 Saudável
4–10⚠️ Cuidado
10+🚨 Arquitetura suspeita
50+💀 Você perdeu o controle
255☠️ Experimento acadêmico

🧪 Exemplo IDCAMS (AIX)

DEFINE ALTERNATEINDEX(NAME(MEU.AIX1)
RELATE(MEU.KSDS)
KEYS(5 0)
RECORDSIZE(80 80)
UPGRADE)

E o PATH:

DEFINE PATH(NAME(MEU.PATH1)
PATHENTRY(MEU.AIX1))

💡 Insight estilo Bellacosa

👉 VSAM permite até 255 AIX…

Mas isso NÃO significa que você deve usar.

💥 Se você precisa de muitos índices:

👉 talvez o problema não seja VSAM… é modelagem


Provocação 

Se o seu KSDS tem muitos AIX…

Você está usando VSAM…

ou tentando recriar o IBM Db2 for z/OS na unha? 😏

-----------------------------------------------------------------------------------

💡 Reflexão final (estilo Bellacosa Mainframe)

Enquanto muita gente corre atrás da “nova tecnologia revolucionária”…

👉 O VSAM está lá:

  • Processando milhões de transações
  • Sem downtime
  • Sem hype
  • Sem marketing

💥 VSAM não é legado. Ele é o alicerce.


Provocação final

Você realmente entende VSAM…
ou só sabe fazer READ NEXT sem dar ABEND?


Descubra mais sobre o VSAM

  • O que é dataset VSAM?

  • Conheça melhor o VSAM

https://eljefemidnightlunch.blogspot.com/2026/01/vsam-o-banco-de-dados-gratuito-do-zos.html


sábado, 22 de julho de 2023

Subscript versus Index : Quando um Programador Descobre que o Maior Vírus Não Está no Data Center... Está em um Mito que Sobrevive Desde os Anos 1970

 

Bellacosa Mainframe apresenta tabelas cobol subscript versus index

☕ Um Café no Bellacosa Mainframe

Subscript versus Index sem Mistérios para Programadores COBOL

Quando um Programador Descobre que o Maior Vírus Não Está no Data Center... Está em um Mito que Sobrevive Desde os Anos 1970

"Em um laboratório subterrâneo, um microscópio pode revelar um organismo invisível. Em um mainframe, um dump pode revelar um erro invisível. Em ambos os casos, a sobrevivência depende de entender detalhes que quase ninguém percebe."


Introdução – Bem-vindo ao Laboratório P4 do Mainframe

Imagine que você acaba de ser contratado para trabalhar em um dos maiores bancos do planeta.

São duas da manhã.

O processamento noturno começou.

Milhões de contas serão atualizadas.

Bilhões de registros serão lidos.

A folha de pagamento nacional será recalculada.

O sistema de cartões irá consolidar compras realizadas no mundo inteiro.

Tudo parece tranquilo...

Até que um batch começa a consumir CPU muito acima do esperado.

O monitor RMF mostra utilização elevada.

O WLM começa a redistribuir prioridades.

O operador do console observa o relógio.

O gerente pergunta:

"O que mudou?"

Depois de algumas horas de investigação, alguém encontra uma rotina COBOL.

Ela percorre uma tabela centenas de milhões de vezes usando um método inadequado de acesso.

Não existe bug.

Não existe ABEND.

Não existe corrupção de dados.

Existe apenas uma pequena decisão tomada por um programador anos atrás.

Uma decisão aparentemente inocente.

Subscript ou Index?

É exatamente essa pequena diferença que vamos investigar hoje.

Assim como em The Andromeda Strain (1971), onde cientistas analisam um organismo microscópico para impedir uma catástrofe, nós vamos colocar o COBOL sob um microscópio e descobrir que existe muito mais acontecendo do que aparenta.

Vista seu jaleco.

O laboratório Bellacosa Mainframe está oficialmente aberto.


O paciente: OCCURS

Antes de falar sobre Subscript ou Index precisamos entender o verdadeiro protagonista.

01 CLIENTES.
   05 CLIENTE OCCURS 100 TIMES.
      10 CODIGO PIC 9(6).
      10 NOME   PIC X(30).

Essa estrutura cria uma tabela.

Ou seja...

Na memória teremos algo semelhante a:

CLIENTE(1)

CLIENTE(2)

CLIENTE(3)

CLIENTE(4)

...

CLIENTE(100)

Nada de mágico aconteceu.

A memória simplesmente possui cem blocos consecutivos.

A pergunta é:

Como chegar até o elemento número 57?

É aí que a investigação começa.


O primeiro suspeito: o Subscript

O Subscript é o método que praticamente todo iniciante aprende.

01 WS-I PIC 9(4).

Depois:

MOVE CLIENTE-NOME (WS-I)

Parece simples.

E realmente é.

Mas existe um detalhe invisível.

Toda vez que fazemos isso, o compilador precisa calcular onde está aquele elemento.

Imagine uma estante enorme.

Você diz:

"Quero o livro número 37."

O bibliotecário pensa:

37

menos

1

×

tamanho do livro

Só depois ele encontra a posição correta.

Em linguagem de máquina acontece algo parecido.

Base da tabela

+

(I-1)

×

Tamanho do registro

Essa conta acontece continuamente.


O segundo suspeito: o Index

Agora surge um personagem misterioso.

05 CLIENTE OCCURS 100 TIMES
   INDEXED BY IDX-CLIENTE.

Observe uma coisa.

O Index não é declarado na Working-Storage.

Ele não possui PIC.

Não possui COMP.

Não possui tamanho conhecido.

Na verdade...

Você nunca sabe como ele realmente é.

Porque ele pertence ao compilador.

É um objeto especial.


O maior mito do COBOL

Durante décadas ouvimos:

"Index é uma variável COMP."

Não.

Isso nunca foi garantido pelo padrão COBOL.

O Enterprise COBOL pode implementá-lo da maneira que desejar.

Ele normalmente utiliza deslocamentos internos.

Mas isso faz parte da implementação do compilador.

Não do programa.

Por isso não podemos fazer:

ADD 1 TO IDX

O compilador simplesmente responde:

"Não."

Quem controla o Index é ele.

Não você.


O laboratório encontra uma pista

Imagine esta tabela.

Registro

34 bytes

O elemento 2 começa exatamente após 34 bytes.

O elemento 3 começa após 68.

O elemento 4 após 102.

O Index guarda justamente esse deslocamento.

Em vez de calcular tudo novamente...

Ele já sabe onde está.

É como um GPS.

Enquanto o Subscript pergunta:

"Qual rua?"

O Index responde:

"Já estou estacionado na frente da casa."


O verdadeiro funcionamento interno

Subscript

Base

+

(I × tamanho)

Index

Base

+

Offset

Essa diferença parece pequena.

Mas em milhões de repetições...

Ela cresce.

Muito.


Então o Index sempre vence?

Não.

Aqui entra um dos maiores avanços dos compiladores modernos.

Os primeiros compiladores COBOL surgiram quando processadores eram extremamente limitados.

Multiplicar números custava caro.

Hoje...

O Enterprise COBOL 6.x é absurdamente inteligente.

Ele reconhece padrões.

Remove cálculos repetidos.

Mantém valores em registradores.

Transforma multiplicações em deslocamentos.

Faz otimizações que simplesmente não existiam nos anos 70.

Em diversas situações...

Subscript e Index acabam gerando praticamente o mesmo código de máquina.

Sim.

Você leu corretamente.


O fantasma dos anos 1970

Por que então tantos livros dizem:

"Nunca use Subscript."

Porque eles estavam certos...

Na época deles.

Era uma realidade dos compiladores antigos.

Hoje a situação mudou.

Mas o mito permaneceu vivo.

É um daqueles vírus culturais que atravessam gerações.

Assim como em The Andromeda Strain, onde o verdadeiro perigo era um organismo microscópico desconhecido, aqui o verdadeiro "vírus" é uma recomendação antiga repetida sem contexto.


SEARCH: onde o Index reina absoluto

Existe um momento em que não há discussão.

SEARCH.

SEARCH CLIENTE

Ou

SEARCH ALL CLIENTE

Esses comandos exigem Index.

Por quê?

Porque o compilador controla o deslocamento automaticamente.

Ele move o ponteiro.

Avança.

Retrocede.

Calcula posições intermediárias.

Tudo sem intervenção do programador.


SEARCH ALL e a inteligência da busca binária

Imagine uma lista com um milhão de clientes.

Uma busca sequencial faria:

1

2

3

4

5

6

...

999999

SEARCH ALL faz algo muito diferente.

500000

↓

250000

↓

375000

↓

312500

Cada comparação elimina metade da tabela.

É o famoso algoritmo Binary Search.

Complexidade:

O(log n)

Enquanto uma busca sequencial é

O(n)

A diferença entre essas duas abordagens é gigantesca quando falamos em milhões de registros.


Um detalhe que poucos conhecem

Podemos copiar índices.

SET IDX-B TO IDX-A

Isso não copia um número.

Copia o deslocamento interno.

É extremamente eficiente.


Outra curiosidade

Você consegue escrever:

DISPLAY WS-I

Mas nunca faz:

DISPLAY IDX

Porque ele não representa um número lógico.

Ele representa uma posição interna conhecida apenas pelo compilador.


O que realmente acontece no processador IBM Z?

Agora entramos na sala limpa do laboratório.

Os processadores IBM Z atuais possuem instruções extremamente sofisticadas para cálculo de endereços.

O Enterprise COBOL conhece essas instruções.

Ele utiliza registradores.

Mantém offsets.

Evita recálculos.

Explora pipelines internos do processador.

Resultado?

Muito do trabalho pesado desaparece antes mesmo do programa executar.

É uma das razões pelas quais aplicações COBOL continuam processando milhões de transações por segundo.


Comparando com C

Quem conhece C entende rapidamente.

Subscript lembra:

array[i]

O compilador faz:

base

+

i

×

sizeof(item)

Já o Index funciona como um ponteiro controlado pelo compilador.

Embora tecnicamente não seja um ponteiro exposto ao programador.


Quando usar Subscript?

Excelente escolha para:

✔ programas didáticos

✔ tabelas pequenas

✔ processamento simples

✔ manutenção fácil

✔ código mais intuitivo


Quando usar Index?

Ideal para:

✔ SEARCH

✔ SEARCH ALL

✔ tabelas enormes

✔ processamento intensivo

✔ milhões de iterações

✔ rotinas críticas


Curiosidade histórica

Nos anos 1970, CPU era um recurso precioso.

Algumas empresas alugavam tempo de processamento por minuto.

Cada instrução economizada significava dinheiro.

Não era exagero.

Era sobrevivência.

Foi nesse ambiente que a preferência por Index nasceu.

Décadas depois, muitos programadores continuam repetindo a recomendação sem conhecer sua origem.


Easter Egg Bellacosa Mainframe 🥚

Se você assistir novamente The Andromeda Strain, perceberá que praticamente toda a tensão do filme vem da investigação meticulosa.

Ninguém sai correndo.

Ninguém explode prédios.

Ninguém derrota o problema com um discurso motivacional.

Os cientistas fazem algo muito mais difícil:

Eles observam.

Coletam evidências.

Eliminam hipóteses.

É exatamente assim que trabalham os melhores analistas de performance em mainframe.

Eles não começam alterando código.

Eles analisam:

  • RMF

  • SMF

  • CPU Time

  • EXCP

  • Cache

  • WLM

  • Explain

  • Dumps

  • Estatísticas do compilador

Performance não nasce de achismos.

Nasce de evidências.


Curiosidades que poucos iniciantes conhecem

☕ O comando SET IDX UP BY 1 não soma necessariamente o valor 1. Ele ajusta o deslocamento interno para o próximo elemento da tabela, independentemente do tamanho do registro.

☕ Um OCCURS DEPENDING ON cria tabelas de tamanho variável, exigindo atenção extra ao acessar elementos.

SEARCH ALL só funciona corretamente quando a tabela está previamente ordenada pelo campo pesquisado. Muitos erros de produção surgem porque essa regra foi esquecida.

☕ O Enterprise COBOL pode eliminar cálculos redundantes durante a compilação, principalmente com níveis altos de otimização (OPTIMIZE).

☕ Em alguns casos, o gargalo não está no acesso à tabela, mas no I/O, em chamadas ao Db2, VSAM ou CICS. Otimizar Subscript versus Index sem medir o restante do programa pode não produzir ganho perceptível.


Passo a passo para escolher corretamente

  1. A tabela é pequena?
    Use Subscript. A clareza do código geralmente vale mais.

  2. Há busca frequente?
    Considere INDEXED BY e SEARCH.

  3. A tabela está ordenada?
    Aproveite SEARCH ALL para busca binária.

  4. O programa processa milhões de registros?
    Meça o desempenho antes de otimizar.

  5. O compilador moderno já resolve o problema?
    Verifique o código gerado e os relatórios de otimização antes de assumir que existe vantagem.

  6. Você está seguindo um mito ou uma evidência?
    Essa talvez seja a pergunta mais importante de todas.


Conclusão – O verdadeiro agente invisível

No fim da investigação, descobrimos que o verdadeiro inimigo não era o Subscript.

Nem o Index.

O verdadeiro agente invisível era o mito.

Durante décadas, frases como "Index sempre é mais rápido" foram repetidas como se fossem leis universais. A realidade é muito mais interessante: compiladores evoluíram, processadores IBM Z ficaram extraordinariamente eficientes e muitas otimizações passaram a acontecer automaticamente.

Isso não significa que Subscript e Index sejam iguais. Eles continuam sendo conceitos diferentes, com propósitos diferentes. O Index permanece essencial para SEARCH, SEARCH ALL e cenários de alto desempenho. O Subscript continua sendo simples, legível e perfeitamente adequado para inúmeras aplicações.

O programador COBOL que apenas memoriza regras continua preso aos manuais dos anos 1970. Já aquele que entende o funcionamento interno da linguagem, do compilador e da arquitetura IBM Z enxerga além dos mitos. Ele sabe quando confiar no compilador, quando medir desempenho e quando realmente vale a pena otimizar.

Como em The Andromeda Strain, o sucesso não pertence a quem faz mais barulho. Pertence a quem observa os detalhes invisíveis, testa hipóteses e toma decisões baseadas em evidências. No universo do mainframe, essa mentalidade é o que transforma um simples programador em um verdadeiro investigador dos sistemas críticos que sustentam bancos, governos e a economia mundial.

quarta-feira, 22 de maio de 2019

☕🔥 DB2 z/OS — COMO IDENTIFICAR PROBLEMAS EM ÍNDICES, ANALISAR A SAÚDE E CRIAR ÍNDICES EFICIENTES

 

Bellacosa Mainframe e a saude do Db2

☕🔥 DB2 z/OS — COMO IDENTIFICAR PROBLEMAS EM ÍNDICES, ANALISAR A SAÚDE E CRIAR ÍNDICES EFICIENTES

No Db2 for z/OS, índices são literalmente o “GPS” do otimizador.
Quando um índice está ruim, fragmentado, mal desenhado ou inconsistente, os sintomas aparecem rapidamente:

  • CPU alta

  • GETPAGE excessivo

  • LOCKS maiores

  • Deadlocks

  • Elapsed Time absurdo

  • SORT desnecessário

  • RUNSTATS inconsistentes

  • ACCESS PATH inesperado

  • Tablespace em CHECK/RBDP/RECP

  • RID List Overflow

  • REORG frequente


🔥 COMO IDENTIFICAR PROBLEMAS EM ÍNDICES

1 — Verificando Fragmentação do Índice

Um dos principais indicadores.

Consultas importantes

SELECT
    NAME,
    CLUSTERING,
    CLUSTERRATIOF,
    LEAFDIST,
    NLEVELS,
    FULLKEYCARDF,
    FIRSTKEYCARDF
FROM SYSIBM.SYSINDEXES
WHERE CREATOR = 'SEU_SCHEMA'
AND TBNAME = 'SUA_TABELA';

🔎 O QUE OBSERVAR

CLUSTERRATIOF

Mostra o quanto os dados seguem a sequência do índice clustering.

Valores

ValorSituação
> 95Excelente
80–95Aceitável
< 80Fragmentação séria

Baixo CLUSTERRATIO gera:

  • Mais I/O

  • Mais Sync Read

  • Mais Random Access

  • Mais CPU


LEAFDIST

Distância média entre páginas leaf.

Quanto maior:

  • pior a localidade física

  • mais page split ocorreu


NLEVELS

Quantidade de níveis B-Tree.

NívelInterpretação
2-3Normal
4+Índice muito grande ou mal estruturado

Mais níveis = mais GETPAGE.


🔥 PAGE SPLIT — O GRANDE VILÃO

Quando páginas do índice enchem:

  • Db2 divide páginas

  • reorganiza ponteiros

  • aumenta fragmentação

Sintomas:

  • CPU cresce

  • bufferpool sofre

  • random I/O aumenta


🔎 COMO IDENTIFICAR PAGE SPLIT

SELECT
    NAME,
    SPACEF,
    STATSTIME
FROM SYSIBM.SYSINDEXSPACESTATS
WHERE DBNAME = 'SEU_DB';

🔥 REORGCHECK — O TESTE CLÁSSICO

No Db2 LUW existe REORGCHK.

No z/OS normalmente usamos:

  • RUNSTATS

  • REORG TABLESPACE/INDEX

  • Estatísticas catalogadas

  • RTS (Real Time Statistics)


🔥 REAL TIME STATISTICS (RTS)

Tabela importantíssima:

SYSIBM.SYSINDEXSPACESTATS

Campos críticos:

CampoSignificado
REORGINSERTSInserts desde último REORG
REORGDELETESDeletes
REORGUPDATESUpdates
LEAFDISTFragmentação
FARINDREFReferência distante
NEARINDREFReferência próxima

🔥 FARINDREF — UM DOS MELHORES INDICADORES

Mostra quantos acessos ao índice apontam para linhas longe fisicamente.

Quanto maior:

  • pior clustering

  • pior cache

  • pior bufferpool hit ratio


🔥 COMO SABER SE O ÍNDICE NÃO ESTÁ SENDO USADO

Pacotes e explain.


EXPLAIN

EXPLAIN PLAN SET QUERYNO = 100
FOR
SELECT *
FROM CLIENTES
WHERE CPF = ?;

Depois consulte:

SELECT
    ACCESSNAME,
    ACCESSTYPE,
    MATCHCOLS
FROM PLAN_TABLE
WHERE QUERYNO = 100;

🔎 INTERPRETAÇÃO

CampoSignificado
ACCESSTYPE='I'Uso de índice
MATCHCOLSQuantas colunas casaram
ACCESSNAMEÍndice usado

🔥 INDICADORES DE ÍNDICE RUIM

1 — MATCHCOLS baixo

Índice composto mal desenhado.


2 — ACCESSTYPE = 'R'

Tablespace Scan.

Ruim para tabelas grandes.


3 — RID LIST PROCESSING

Pode indicar:

  • excesso de índices

  • índices ruins

  • baixa seletividade


🔥 COMO DESENHAR UM ÍNDICE FORTE

REGRA #1 — COLUNA MAIS SELETIVA PRIMEIRO

Exemplo ruim:

CREATE INDEX IX1
ON CLIENTES
(SEXO, ESTADO);

Baixa cardinalidade.


Melhor:

CREATE INDEX IX1
ON CLIENTES
(CPF, ESTADO);

🔥 REGRA #2 — RESPEITAR O PREDICATE

Db2 usa LEFTMOST MATCHING.

Exemplo:

INDEX(A,B,C)

Funciona bem para:

WHERE A=?
WHERE A=? AND B=?
WHERE A=? AND B=? AND C=?

Ruim para:

WHERE B=?
WHERE C=?

🔥 REGRA #3 — EVITAR ÍNDICES DEMAIS

Cada índice:

  • aumenta INSERT

  • aumenta UPDATE

  • aumenta DELETE

  • aumenta LOG

  • aumenta LOCKING

  • aumenta CPU


🔥 QUANTOS ÍNDICES UMA TABELA DEVE TER?

Não existe número mágico.

Mas no mundo real:

TipoRecomendação
OLTP3–7
Tabelas críticas10–15 máximo
Acima de 20normalmente problema de modelagem

Já vi tabelas com:

  • 80 índices

  • 120 índices

Resultado:

  • INSERT sofrendo

  • Deadlock

  • log monstruoso

  • CPU absurda


🔥 ÍNDICE CLUSTERING

Muito importante.

CREATE INDEX IXCLI1
ON CLIENTES (CPF)
CLUSTER;

Só pode existir UM clustering index por tabela.

Ele influencia:

  • ordem física

  • prefetch

  • sequential detection

  • range scan


🔥 RUNSTATS — FUNDAMENTAL

Sem RUNSTATS:

  • optimizer fica “cego”

  • access path piora


Exemplo

RUNSTATS TABLESPACE DB1.TSCLI
TABLE(ALL)
INDEX(ALL)
KEYCARD
FREQVAL
HISTOGRAM
UPDATE ALL

🔥 O QUE O RUNSTATS FAZ

Atualiza:

  • cardinalidade

  • clustering

  • distribuição

  • frequência

  • histogramas

  • seletividade


🔥 RUNSTATS COM SHRLEVEL CHANGE

Permite online.

SHRLEVEL CHANGE

Muito usado em produção.


🔥 REORG INDEX

Quando usar:

  • fragmentação

  • page split

  • baixa cluster ratio


Exemplo

REORG INDEX (ALL) TABLESPACE DB1.TSCLI
SHRLEVEL CHANGE

🔥 REBUILD INDEX

Mais pesado.

Usado quando:

  • índice corrompido

  • recover

  • inconsistency

  • rebuild pós LOAD REPLACE


🔥 RUNSTATS x REORG

UtilitárioFunção
RUNSTATSAtualiza estatísticas
REORGReorganiza fisicamente
REBUILD INDEXReconstrói índice

🔥 RUNSTATUS / RESTRICTIVE STATES

Estados importantes no Db2.


🔴 CHECK PENDING (CHKP)

Db2 exige CHECK DATA.

Exemplo:

-904 RESOURCE UNAVAILABLE

Resolver:

CHECK DATA TABLESPACE DB1.TS1

🔴 REORG PENDING (REORP)

Db2 exige REORG.

Muito comum após:

  • ALTER

  • compress

  • partition change

Resolver:

REORG TABLESPACE DB1.TS1

🔴 RECOVER PENDING (RECP)

Objeto precisa RECOVER.


🔴 AUX CHECK PENDING

LOB inconsistente.


🔴 ADVISORY REORG PENDING (AREO*)

Db2 recomenda REORG.

Não bloqueia uso.


🔥 QUIESCE — O “PONTO DE RESTORE”

Cria ponto consistente para recover coordenado.


Exemplo

QUIESCE TABLESPACE DB1.TS1
WRITE YES

🔎 O QUE ELE FAZ

Sincroniza:

  • logs

  • páginas

  • buffers

Muito usado antes de:

  • LOAD

  • grandes mudanças

  • backup crítico


🔥 DISPLAY DATABASE

Comando essencial.

-DISPLAY DATABASE(DB1) SPACENAM(TS1) RESTRICT

Mostra:

  • REORP

  • CHKP

  • AREO*

  • COPY pending

  • advisory states


🔥 DISPLAY INDEX

-DISPLAY DATABASE(DB1) SPACENAM(TS1) USE

🔥 IFCID E MONITORAMENTO

Sysprog geralmente usa:

  • IFCID 199

  • IFCID 376

  • IFCID 389

  • OMEGAMON

  • MainView

  • Query Monitor

Para detectar:

  • index scan ruim

  • getpages altos

  • synchronous I/O

  • random read

  • RID overflow


🔥 SINAIS CLÁSSICOS DE ÍNDICE PROBLEMÁTICO

SintomaPossível causa
CPU altaÍndice ruim
Tablespace Scanfalta índice
GETPAGE altoexcesso de níveis
Sync I/O altofragmentação
Deadlockexcesso índices
INSERT lentomuitos índices
REORG frequentepage split
Bufferpool ruimclustering baixo

☕ MELHOR ESTRATÉGIA ENTERPRISE

Fluxo saudável

RUNSTATS
   ↓
EXPLAIN
   ↓
ANÁLISE RTS
   ↓
REORG
   ↓
MONITORAMENTO IFCID
   ↓
AJUSTE DE ACCESS PATH

🔥 RESUMO ENTERPRISE

Índice saudável:

✅ Alta seletividade
✅ Baixo NLEVELS
✅ CLUSTERRATIO alto
✅ Poucos page splits
✅ MATCHCOLS alto
✅ Bom clustering
✅ Estatísticas atualizadas
✅ Poucos índices redundantes


☕ REGRA DE OURO NO Db2 z/OS

“Índice demais mata INSERT.
Índice de menos mata SELECT.
Índice ruim mata os dois.”

terça-feira, 21 de maio de 2013

💾 VSAM para Programadores Júnior — O Guia Essencial


Bellacosa Mainframe introdução ao VSAM


 

💾 VSAM para Programadores Júnior — O Guia Essencial

Se você está entrando no universo do mainframe, vai ouvir falar de VSAM o tempo todo. Ele não é apenas um tipo de arquivo — é um dos pilares de armazenamento de dados no z/OS.


📌 O que é VSAM?

VSAM (Virtual Storage Access Method) é um método de acesso a dados criado pela IBM para organizar, armazenar e recuperar dados de forma eficiente.

Diferente dos arquivos sequenciais tradicionais, o VSAM permite:

  • Acesso rápido (direto e sequencial)
  • Organização estruturada
  • Controle mais refinado de dados

👉 Pense nele como um “mini banco de dados estruturado”, porém mais próximo do sistema operacional.


🎯 Para que serve o VSAM?

O VSAM é amplamente usado em:

  • Sistemas bancários 💳
  • Sistemas de seguros 📄
  • Aplicações críticas em tempo real (CICS) ⚡
  • Processamentos batch de alto volume

💡 Em resumo:
Ele é usado quando você precisa de alta performance + confiabilidade + acesso estruturado aos dados.


⚙️ Funcionalidades principais

O VSAM oferece várias capacidades importantes:

  • 🔎 Acesso direto (random) — buscar um registro específico
  • 🔁 Acesso sequencial — ler dados em ordem
  • 🔐 Integridade de dados
  • Alta performance em grandes volumes
  • 📊 Indexação (em alguns tipos)

🧰 IDCAMS — O canivete suíço do VSAM

O VSAM é gerenciado principalmente pelo utilitário:

👉 IDCAMS

Com o IDCAMS você pode:

  • Criar datasets VSAM (DEFINE)
  • Deletar (DELETE)
  • Listar informações (LISTCAT)
  • Reorganizar dados
  • Copiar datasets

🧪 Exemplo simples

//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER(NAME(MEU.KSDS)
INDEXED
KEYS(10 0)
RECORDSIZE(80 80)
TRACKS(1 1))
/*

📦 Tipos de VSAM

Agora vem a parte mais importante: entender os tipos.


🔹 ESDS — Entry Sequenced Data Set

  • Dados gravados em sequência
  • Não possui chave
  • Acesso por posição (RBA)

👉 Uso típico:

  • Logs
  • Arquivos históricos

🔹 KSDS — Key Sequenced Data Set

  • Possui chave primária
  • Usa índice para acesso rápido
  • Permite acesso direto e sequencial

👉 Uso típico:

  • Sistemas bancários
  • Cadastros de clientes

💡 É o tipo mais usado!


🔹 RRDS — Relative Record Data Set

  • Registros organizados por número relativo (RRN)
  • Acesso direto pelo número do registro
  • Estrutura fixa

👉 Uso típico:

  • Tabelas com posições fixas
  • Sistemas que dependem de índice numérico

🔹 LDS — Linear Data Set

  • Não possui estrutura de registros
  • Apenas um bloco contínuo de bytes

👉 Uso típico:

  • DB2
  • Armazenamento interno de bancos

💡 É mais “baixo nível”.


⚖️ Diferenças entre ESDS, KSDS, RRDS e LDS

TipoChaveAcessoEstruturaUso comum
ESDSSequencial / RBASimplesLogs
KSDSDireto + SequencialIndexadoCadastros
RRDS❌ (usa RRN)DiretoFixoTabelas
LDSByte offsetSem registroDB2

🤝 Semelhanças entre eles

Apesar das diferenças, todos compartilham:

  • São datasets VSAM
  • Gerenciados via IDCAMS
  • Altamente performáticos
  • Usados no z/OS
  • Suportam grandes volumes de dados

🚀 VSAM NoSQL? O que é isso?

O termo “VSAM NoSQL” não é oficial da IBM, mas é usado informalmente para descrever:

👉 Uso do VSAM como armazenamento chave-valor

Exemplo:

  • KSDS funcionando como um “NoSQL”
  • A chave = identificador
  • O registro = documento

💡 Isso aparece muito em:

  • APIs expostas via CICS
  • Integrações modernas (JSON + COBOL)

🧠 Resumo estilo Bellacosa

  • VSAM é o motor de dados raiz do mainframe
  • KSDS é o “rei” 👑
  • IDCAMS é seu melhor amigo 🧰
  • LDS é o “lado obscuro” (baixo nível)
  • VSAM ainda vive — e MUITO — em sistemas críticos

domingo, 5 de dezembro de 2010

Bellacosa Index Page: Checklist de Indexação SEO – Guia Completo

 

Check list seo page

Checklist de Indexação SEO – Guia Completo

1. Permitir indexação nos motores de busca

Antes de qualquer otimização, é essencial garantir que o site possa ser indexado. Verifique se não há bloqueios globais, como:

  • noindex aplicado ao site inteiro

  • configurações de privacidade ativadas

  • cabeçalhos HTTP do tipo X-Robots-Tag: noindex

Use o Google Search Console para confirmar se as páginas estão “Disponíveis para o Google”.


2. Robots.txt bem configurado

O arquivo robots.txt controla o rastreamento. Uma configuração correta:

  • permite acesso às páginas importantes

  • bloqueia áreas irrelevantes (ex: páginas de busca internas)

  • declara o sitemap

Exemplo recomendado:

User-agent: * Disallow: /search Allow: / Sitemap: https://www.seusite.com/sitemap.xml

Evite erros graves como Disallow: /, que bloqueia todo o site.


3. Sitemap XML funcional e enviado

O sitemap ajuda o Google a descobrir URLs.
Boas práticas:

  • gerar sitemap automático

  • incluir apenas páginas indexáveis

  • enviar no Google Search Console

  • monitorar erros de leitura

O sitemap não deve ser indexado, apenas lido por robôs.


4. Uso correto de meta robots

As tags meta robots ou regras de robôs personalizadas devem ser usadas com cautela:

  • páginas e posts importantes: index, follow

  • páginas de busca e arquivo: noindex

Nunca aplique noindex em páginas que você deseja que apareçam nos resultados.


5. Estrutura correta de títulos (Headings)

Cada página deve conter:

  • 1 único H1 (título principal)

  • H2 para subtítulos

  • H3/H4 para hierarquia interna

Os headings ajudam o Google a entender o tema e a organização do conteúdo.


6. Títulos e meta descrições otimizados

Cada página deve ter:

  • título único e descritivo (50–60 caracteres)

  • meta descrição clara e atrativa (120–160 caracteres)

Esses elementos influenciam diretamente o CTR (taxa de cliques) nos resultados de busca.


7. Conteúdo com qualidade e profundidade

Conteúdo é um dos principais fatores de SEO.
Checklist mínimo:

  • textos com 300 palavras ou mais

  • conteúdo original

  • respostas claras à intenção do usuário

  • parágrafos curtos e escaneáveis

Conteúdo fraco tende a ser ignorado ou removido do índice.


8. URLs amigáveis

Boas URLs:

  • curtas

  • sem parâmetros desnecessários

  • com palavras-chave

  • sem caracteres especiais

Exemplo bom:

/checklist-indexacao-seo.html

9. Links internos estratégicos

Links internos:

  • ajudam o Google a descobrir páginas

  • distribuem autoridade

  • aumentam tempo de permanência

Checklist:

  • cada post deve linkar para outros conteúdos relevantes

  • páginas importantes devem ser acessíveis a partir da home


10. Links externos confiáveis

Links para sites relevantes:

  • aumentam credibilidade

  • contextualizam o conteúdo

  • melhoram a experiência do usuário

Evite links quebrados ou para sites de baixa qualidade.


11. Otimização de imagens

Imagens também são indexáveis:

  • usar nomes descritivos

  • preencher o atributo alt

  • comprimir arquivos

  • evitar imagens muito pesadas

Isso melhora SEO e velocidade.


12. Performance e velocidade

Sites lentos têm pior desempenho nos rankings.
Verifique:

  • tempo de carregamento

  • excesso de scripts

  • imagens não otimizadas

Ferramenta recomendada: Google PageSpeed Insights.


13. Mobile-friendly (responsivo)

A indexação do Google é mobile-first.
Checklist:

  • layout responsivo

  • textos legíveis no celular

  • botões clicáveis

  • sem pop-ups intrusivos


14. Evitar conteúdo duplicado

Conteúdo duplicado confunde os buscadores.
Cuidados:

  • não repetir textos inteiros

  • usar canonical quando necessário

  • evitar múltiplas URLs com o mesmo conteúdo


15. Dados estruturados (Schema)

Sempre que possível, use dados estruturados para:

  • artigos

  • breadcrumbs

  • reviews

  • vídeos

Isso pode gerar rich snippets e aumentar o CTR.


16. Frequência de publicação

Sites atualizados com frequência são rastreados com mais regularidade.

  • mantenha consistência

  • evite longos períodos sem novos conteúdos


17. Monitoramento constante

SEO não é tarefa única.
Checklist de acompanhamento:

  • revisar relatórios do Search Console

  • corrigir páginas excluídas

  • atualizar conteúdos antigos

  • acompanhar desempenho


18. Experiência do usuário

O Google avalia sinais de uso:

  • tempo na página

  • taxa de rejeição

  • navegação intuitiva

Conteúdo bom e bem estruturado retém o visitante.


Conclusão

Um Checklist de Indexação SEO bem aplicado garante que seu site:

  • seja rastreável

  • seja indexado corretamente

  • tenha conteúdo compreendido pelos motores de busca

  • ofereça boa experiência ao usuário

SEO não é sobre truques, mas sobre clareza, qualidade e consistência.
Ao seguir este checklist, você cria uma base sólida para crescer organicamente, ganhar visibilidade e construir autoridade nos motores de busca de forma sustentável.


Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...