Translate

quarta-feira, 11 de março de 2020

🔥☕ DB2 z/OS MAINFRAME — A ANATOMIA DO “CÉREBRO DOS DADOS” ☕🔥

 

Bellacosa Mainframe entenda o funcionamento do DB2

🔥☕ DB2 z/OS MAINFRAME — A ANATOMIA DO “CÉREBRO DOS DADOS” ☕🔥

Salve jovem padawan neste laboratorio pratico veremos alguns dos componentes mais profundos e importantes do DB2 z/OS:
Storage Groups, Bufferpools, Logs, Optimizer, EDM Pool, índices B-Tree, Data Sharing, BSDS e arquitetura interna do banco.

Isso já entra no território de:

  • DBA de produção,
  • suporte avançado,
  • performance tuning,
  • recovery,
  • troubleshooting crítico,
  • arquitetura interna do DB2.

O DB2 no z/OS não é apenas um “banco de dados”.

Ele é:

  • sistema transacional,
  • gerenciador de memória,
  • engine de recovery,
  • scheduler interno,
  • coordenador de locking,
  • otimizador SQL,
  • e controlador de integridade transacional.

🔥 1) STORAGE GROUP — O “MAPEAMENTO DO TERRITÓRIO”

🧠 O que é

Storage Group é o agrupamento lógico de volumes DASD usados pelo DB2.


🔍 Função

O DBA não precisa dizer:

  • “grave exatamente no disco XYZ”

O DB2 usa o Storage Group para decidir:

  • onde alocar datasets,
  • como distribuir dados,
  • onde criar VSAM LDS.

🧨 Exemplo

CREATE STOGROUP STGPRD
VOLUMES(PRD001,PRD002)
VCAT(DB2CAT);

🔥 O que ele controla

  • datasets DB2
  • VSAM LDS
  • tablespaces
  • indexspaces
  • crescimento físico

🚨 Problema clássico

Storage Group sem espaço.

Resultado:

  • inserts falham,
  • extents explodem,
  • utilities quebram.

🔥 LAB 01 — STORAGE GROUP LOTADO

🚨 Problema

Aplicação falhando:

SQLCODE -904
RESOURCE UNAVAILABLE

🔍 Investigação

Verificar volumes:

-DIS DB(*) SPACENAM(*)

💣 Diagnóstico

DASD cheio.


✅ Solução

Adicionar volume:

ALTER STOGROUP STGPRD
ADD VOLUMES(PRD003);

🧠 Explicação

O DB2 não conseguia expandir datasets.


🔥 2) TABELAS — O “CORPO FÍSICO” DOS DADOS

🧠 Estrutura lógica

Tabela:

  • colunas
  • linhas
  • constraints
  • índices

Mas internamente:

  • pages
  • RID
  • slots
  • overflow pages

🧨 Exemplo

CREATE TABLE ALUNOS
(
ID INTEGER,
NOME CHAR(40),
CURSO CHAR(20)
);

🔥 Tipos de tabelas

TipoUso
Segmentedtradicional
Partitionedgrandes volumes
Universalmoderno
Temporarytemporárias
Clonedeploy online

🚨 Problema clássico

Tabela enorme sem particionamento.

Resultado:

  • REORG gigantesco,
  • recovery lento,
  • scans monstruosos.

🔥 LAB 02 — TABELA GIGANTE

🚨 Problema

Tabela com 4 bilhões de linhas.

REORG demora 18 horas.


✅ Solução

Migrar para partitioned tablespace.


🧠 Explicação

Particionamento divide carga física.


🔥 3) ÍNDICES — O GPS DO DB2

🧠 O que fazem

Índices evitam full scan.


🔥 Estrutura B-Tree

Seu material menciona:

B-Tree : Índice – Arvore Binaria


🧠 Como funciona

A árvore possui:

  • root page
  • branch pages
  • leaf pages

🔍 O DB2 percorre:

ROOT → BRANCH → LEAF → ROW

🚨 Sem índice

O DB2 lê:

  • milhões de páginas.

🧨 Exemplo

CREATE INDEX IXALUNO
ON ALUNOS(ID);

🔥 LAB 03 — SQL MATANDO CPU

🚨 Problema

SELECT demorando minutos.


🔍 Investigação

EXPLAIN mostra:

TABLESPACE SCAN

✅ Solução

Criar índice:

CREATE INDEX IXCPF
ON CLIENTE(CPF);

🧠 Explicação

DB2 deixou de varrer tabela inteira.


🔥 4) CATALOGO DB2 — O “DNA” DO BANCO

Seu material aborda:

Catalogo
Metadados


🧠 O que é

O catálogo guarda:

  • definição tabelas
  • índices
  • colunas
  • privileges
  • packages
  • plans

🔍 Tabelas famosas

TabelaFunção
SYSIBM.SYSTABLEStabelas
SYSIBM.SYSCOLUMNScolunas
SYSIBM.SYSINDEXESíndices
SYSIBM.SYSPACKAGEpackages

🧨 Exemplo

SELECT NAME
FROM SYSIBM.SYSTABLES
WHERE CREATOR='ESCOLA';

🔥 LAB 04 — DESCOBRIR ÍNDICES

🚨 Problema

Ninguém sabe quais índices existem.


✅ Solução

SELECT NAME
FROM SYSIBM.SYSINDEXES
WHERE TBNAME='CLIENTE';

🧠 Explicação

Catálogo é o “Google interno” do DB2.


🔥 5) LOG — A “CAIXA PRETA” DO DB2

Seu material aborda:

Active LOG
Archive LOG
BSDS


🧠 O que é o LOG

Tudo que muda no DB2 vai para log.


🔥 Serve para

  • rollback
  • recovery
  • restart
  • integridade
  • auditoria

🔥 ACTIVE LOG

Logs atuais em uso.


🔥 ARCHIVE LOG

Logs antigos arquivados.


🔥 BSDS

Bootstrap Dataset.

Contém:

  • inventário logs
  • checkpoints
  • bootstrap recovery

🚨 Se BSDS corrompe…

O DB2 entra em crise séria.


🔥 LAB 05 — LOG FULL

🚨 Problema

Sistema travado.


🔍 Investigação

-DIS LOG

💣 Resultado

Logs esgotados.


✅ Solução

  • aumentar logs
  • reduzir transações longas
  • acelerar archive

🧠 Explicação

Sem log livre o DB2 para updates.


🔥 6) BUFFERPOOL — O “PULMÃO” DO DB2

Seu material aborda:

Bufferpool
Frame Bufferpool


🧠 O que é

Cache de páginas em memória.


🔍 Fluxo

DASD → BUFFERPOOL → CPU

🚨 Bufferpool ruim = muito I/O


🧨 Exemplo

-DIS BUFFERPOOL(BP0)

🔥 LAB 06 — HIT RATIO HORRÍVEL

🚨 Problema

I/O gigantesco.


🔍 Resultado

HIT RATIO 58%

✅ Solução

Aumentar:

ALTER BUFFERPOOL(BP0) VPSIZE(50000)

🧠 Explicação

Mais páginas em cache.


🔥 7) DB2 DATA SHARING — O “CLUSTER” DO MAINFRAME

Seu material mostra:

DB2 DATA SHARING com Group Bufferpools


🧠 O que é

Vários DB2s compartilhando dados simultaneamente.


🔥 Permite

  • alta disponibilidade
  • escalabilidade
  • failover
  • paralelismo

🔍 Componentes

ComponenteFunção
Coupling Facilitysincronização
GBPcache compartilhado
IRLMlocking

🚨 Problema clássico

Contention no GBP.


🔥 LAB 07 — CONTENTION EM DATA SHARING

🚨 Problema

Locks excessivos.


🔍 Investigação

-DIS GROUP

💣 Resultado

GBP saturation.


✅ Solução

Aumentar Group Bufferpool.


🧠 Explicação

Muitos membros acessando mesmas páginas.


🔥 8) OPTIMIZER — O “CÉREBRO” DO SQL

Seu material aborda:

DB2 Optimizer


🧠 O que faz

Decide:

  • índice
  • join
  • scan
  • sort
  • access path

🔥 Sem optimizer

SQL seria inviável.


🔍 Ele analisa:

  • cardinalidade
  • seletividade
  • RUNSTATS
  • índices
  • distribuição dados

🔥 LAB 08 — OPTIMIZER ESCOLHEU MAL

🚨 Problema

SQL piorou após deploy.


🔍 Investigação

Novo access path.


✅ Solução

Executar:

RUNSTATS TABLESPACE FINANCE.CLIENTE

Rebind package.


🧠 Explicação

Stats antigas enganaram optimizer.


🔥 9) EDM POOL — O “CACHE CEREBRAL”

Seu material aborda:

  • EDM POOL
  • Dynamic Cache
  • PT/CT
  • Skeleton Pool
  • DBD


🧠 O que é

Cache interno de:

  • packages
  • plans
  • SQL dinâmico
  • estruturas DBD

🔥 Problema clássico

EDM pequeno.


🚨 Resultado

  • compilação excessiva
  • CPU alta
  • cache thrashing

🔥 LAB 09 — EDM SATURADO

🚨 Problema

CPU do DB2 explodindo.


🔍 Investigação

-DIS DDF

e monitor EDM.


💣 Resultado

Dynamic statement cache lotado.


✅ Solução

Aumentar EDM pool.


🧠 Explicação

SQL dinâmico recompilando continuamente.


🔥 10) BIND E PACKAGE

Seu material cita:

BindProgram


🧠 O que é BIND

Transforma SQL em package executável.


🔥 PACKAGE

Código SQL otimizado armazenado.


🔥 LAB 10 — PACKAGE INVALIDADO

🚨 Problema

Programa falha após alteração tabela.


💣 Resultado

Package inválido.


✅ Solução

REBIND PACKAGE

🧠 Explicação

DDL alterou estrutura dependente.


🔥 LAB EXTRA — INCIDENTE COMPLETO

🚨 Cenário

Sistema financeiro lento.


🔍 Investigação

Descoberto:

  • RUNSTATS vencido
  • bufferpool saturado
  • índice inválido
  • logs pressionados

✅ Solução

Fluxo:

  1. REBUILD INDEX
  2. REORG
  3. RUNSTATS
  4. Ajuste BUFFERPOOL
  5. Revisão commits

🧠 Resultado

CPU caiu:

  • de 92%
  • para 34%

☕ VISÃO “BELLACOSA MAINFRAME”

O DB2 z/OS parece um banco…

Mas internamente ele é:

  • sistema operacional de dados,
  • motor transacional,
  • mecanismo de recuperação,
  • orquestrador de memória,
  • e inteligência analítica.

Quem aprende:

  • logs,
  • bufferpool,
  • optimizer,
  • EDM,
  • utilities,
  • data sharing,

não aprende apenas SQL…

aprende a anatomia do coração digital das grandes corporações. ☕💣

terça-feira, 10 de março de 2020

🔥 VSAM NA VIDA REAL: O segredo NÃO está no DEFINE… está nos parâmetros que quase ninguém entende

 

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

ProblemaResultado
pouco freespacemuitos splits
freespace excessivodesperdício DASD
CA pequenofragmentaçã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 workloadCI ideal
OLTP/CICS4096
Batch sequencial8192 ou 16384
Muito insert4096
LDS/DB28192+

💣 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

ItemSignificado
lengthtamanho da chave
offsetposiçã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:

FatorImpacto
padrão de insertsplits
concorrêncialock
tamanho do registroCI
crescimentoCA
batch vs onlinebuffers
DASD/cachethroughput

💥 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.”