Translate

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

quinta-feira, 7 de maio de 2026

🔥☕ O CAMINHO DO PADAWAN Db2 — COMO UM PROGRAMADOR COBOL JÚNIOR SOBREVIVE AO MUNDO REAL DOS BANCOS NO MAINFRAME ☕🔥

 

Bellacosa Mainframe com dicas para padawan cobol dominar o db2

🔥☕ O CAMINHO DO PADAWAN Db2 — COMO UM PROGRAMADOR COBOL JÚNIOR SOBREVIVE AO MUNDO REAL DOS BANCOS NO MAINFRAME ☕🔥

Tem uma coisa que quase nenhum curso ensina direito.

O problema de aprender Db2 no mainframe NÃO é decorar:

  • SELECT

  • FETCH

  • CURSOR

  • JOIN

Isso qualquer apostila faz.

O verdadeiro desafio é entender:

🚀 COMO O Db2 “PENSA”

Porque no ambiente bancário:

  • performance é dinheiro

  • CPU custa milhões

  • lock errado derruba sistema

  • SQL ruim gera guerra entre desenvolvimento e DBA

  • um tablespace scan pode parar um banco inteiro

E é aqui que nasce a diferença entre:

  • um programador COBOL comum

  • e um verdadeiro guerreiro do z/OS.


☕ O MAIOR ERRO DO PADAWAN COBOL

Todo iniciante chega no Db2 tentando programar como se estivesse lendo VSAM.

Faz:

  • loop

  • READ

  • IF

  • PERFORM

  • validação manual

  • cursor desnecessário

e transforma o Db2 num simples “arquivo sofisticado”.

🔥 Grave isso:

Db2 NÃO é VSAM.

Db2 é:

  • relacional

  • baseado em conjuntos

  • otimizado matematicamente

  • orientado a custo

  • controlado por estatísticas


🚀 O PROGRAMADOR MAINFRAME MODERNO NÃO PENSA EM LINHAS

Ele pensa em:

SETS


☕ PROCESSAMENTO RELACIONAL

O programador antigo pensa assim:

“Vou buscar linha por linha e processar.”

O programador Db2 sênior pensa:

“Como faço o Db2 processar tudo sozinho?”

Essa mudança mental vale OURO.


🔥 SQL NÃO É APENAS CONSULTA

O padawan acha que SQL é:

SELECT *
FROM CLIENTE

Mas Db2 é MUITO maior:

  • optimizer

  • locking

  • clustering

  • filter factors

  • parallelism

  • stage 1/stage 2

  • access paths

  • static SQL

  • dynamic SQL

  • utilities

  • EXPLAIN

E quando você entende isso…
você começa a dominar o ambiente bancário.


☕ O OPTIMIZER É O VERDADEIRO “CÉREBRO” DO Db2

No mainframe bancário:

  • ninguém lê bilhões de linhas “na força”

  • ninguém faz scan por diversão

  • ninguém quer CPU extra

O optimizer decide:

  • qual índice usar

  • qual join usar

  • se haverá sort

  • se haverá prefetch

  • se haverá paralelismo


🚀 E O QUE O OPTIMIZER USA?

Estatísticas.

RUNSTATS é praticamente:

“os olhos do optimizer”

Sem estatísticas:

  • access path piora

  • índice é ignorado

  • FF fica errado

  • CPU explode


☕ FILTER FACTOR — O SEGREDO QUE MUITOS IGNORAM

Pouca gente iniciante entende isso.

Mas FF muda TUDO.

🚀 Filter Factor

é:

  • a estimativa da porcentagem de linhas que satisfazem um predicado.


☕ Exemplo

WHERE DEPT = 'A00'

Se existem:

  • 10 departamentos

Db2 estima:

1/10 = 0.1

Ou seja:

  • 10% das linhas serão retornadas.


🔥 Quanto MENOR o FF:

MELHOR

Porque:

  • menos linhas

  • menos I/O

  • menos CPU

  • menos pages

  • menos lock


☕ O ERRO CLÁSSICO DO PADAWAN

WHERE COL <> 'X'

🔥 Péssimo FF.

Db2 entende:

“quase todas as linhas servem”

Então:

  • índice perde valor

  • scan aparece

  • CPU sobe


🚀 INDEX NÃO É MAGIA

Outro choque do iniciante.

Ter índice NÃO garante performance.

O optimizer escolhe:

  • usar

  • ignorar

  • combinar

  • fazer screening

  • fazer scan

dependendo:

  • FF

  • cardinalidade

  • clustering

  • custo estimado


☕ O MUNDO REAL DOS BANCOS

Em banco grande:

  • tabela pode ter bilhões de linhas

  • índice pode ter centenas de GB

  • um SQL ruim pode consumir milhares de MIPS

Por isso:

access path é assunto sagrado.


🔥 STAGE 1 vs STAGE 2

Esse conceito separa:

  • SQL eficiente

  • SQL sofrível


☕ Stage 1

Predicado processado cedo:

  • no Data Manager

  • usando índice

  • reduzindo linhas rapidamente

Mais rápido.


☕ Stage 2

Predicado processado depois:

  • mais CPU

  • mais linhas avaliadas

  • menos eficiência


🚀 Exemplo ruim

WHERE YEAR(DATA) = 2025

Função na coluna:

  • pode matar indexabilidade

  • virar stage 2


☕ Melhor abordagem

WHERE DATA BETWEEN '2025-01-01'
AND '2025-12-31'

🔥 LOCKING — O TERROR DOS BANCOS

Padawan geralmente aprende SELECT…

mas não aprende:

concorrência.

E no banco:

  • milhares de programas acessam a mesma tabela ao mesmo tempo.


☕ Lock errado gera:

  • timeout

  • deadlock

  • lentidão

  • aplicação travada

  • fila no CICS

  • caos operacional


🚀 LOCKSIZE

Db2 pode bloquear:

  • row

  • page

  • table space


☕ O perigo do PAGE LOCK

Uma página pode conter:

  • várias linhas

Então:

  • um lock pode bloquear muitos registros sem você perceber.


🔥 ISOLATION LEVEL

Outro tema CRÍTICO.


☕ CS — Cursor Stability

Mais comum no OLTP bancário.

Balanceia:

  • integridade

  • concorrência


☕ RR — Repeatable Read

Mais rígido.
Mais locks.
Mais contenção.


☕ UR — Uncommitted Read

O famoso:

dirty read

Excelente para:

  • relatórios

  • analytics

  • consultas não críticas

Péssimo para:

  • saldo bancário

  • movimentação financeira

😄


🚀 COMO EVITAR DEADLOCK

O curso mostrou algo IMPORTANTÍSSIMO:

Todos os programas devem atualizar na mesma sequência.


☕ Exemplo

Programa A:

CLIENTE → CONTA

Programa B:

CONTA → CLIENTE

🔥 Receita perfeita para deadlock.


🚀 ACCESS PATH — A ALMA DO Db2

Toda query possui um plano.

Db2 decide:

  • scan

  • index access

  • nested loop

  • merge scan

  • hybrid join

  • hash join


☕ TABLESPACE SCAN

Lê tudo.

Pode ser:

  • correto

  • ou desastre absoluto.


☕ INDEXED ACCESS

Busca seletiva.

Muito mais eficiente quando:

  • FF é baixo

  • índice é adequado


🚀 JOINS — O CAMPO DE BATALHA

Padawan normalmente só aprende:

INNER JOIN

Mas Db2 usa:

  • nested loop

  • merge scan

  • hybrid join

  • star join

dependendo:

  • tamanho

  • índices

  • cardinalidade


☕ MERGE SCAN JOIN

Excelente para:

  • tabelas grandes

  • sem índices úteis

  • dados ordenados


🔥 STATIC SQL vs DYNAMIC SQL

No banco:
isso é discussão séria.


☕ STATIC SQL

Pré-compilado.
Pré-otimizado.

Perfeito para:

  • CICS

  • OLTP

  • alta performance


☕ DYNAMIC SQL

Construído runtime.

Excelente para:

  • analytics

  • ferramentas

  • SQL variável


🚀 Por que bancos AMAM STATIC SQL?

Porque:

  • menos CPU

  • menos prepare

  • access path estável

  • melhor governança


☕ EXPLAIN — O RAIO-X DO OPTIMIZER

Se você não usa EXPLAIN…
você está programando no escuro.


🚀 EXPLAIN mostra:

  • índice usado

  • tipo de join

  • matching columns

  • prefetch

  • paralelismo

  • custo estimado


☕ PLAN_TABLE

É praticamente:

a Bíblia do tuning Db2.


🔥 UNION vs UNION ALL

Padawan frequentemente usa:

UNION

sem perceber:

  • Db2 faz SORT

  • remove duplicatas

  • aumenta CPU


🚀 UNION ALL

Muito mais rápido.

Use quando:

  • duplicatas não importam.


☕ FETCH FIRST

Outro segredo simples que salva CPU.


❌ Errado

SELECT *
FROM BIGTABLE

✅ Melhor

FETCH FIRST 10 ROWS ONLY

🚀 “PEÇA SOMENTE O NECESSÁRIO”

Essa é uma filosofia inteira do Db2.


☕ EVITE ESCREVER CÓDIGO

A aula falou algo brilhante:

“Avoid Writing Code”


🚀 O Db2 já sabe:

  • somar

  • converter

  • truncar

  • upper/lower

  • calcular datas

  • agregar

  • ordenar

  • paralelizar

Então:

  • use funções SQL

  • use set processing

  • use procedures

  • use triggers


☕ O COBOL NÃO DEVE FAZER O QUE O Db2 FAZ MELHOR

Essa frase muda carreiras.


🔥 O SEGREDO FINAL

No ambiente bancário:
o programador COBOL NÃO domina apenas COBOL.

Ele precisa entender:

  • SQL

  • optimizer

  • access path

  • locking

  • concurrency

  • CPU

  • I/O

  • clustering

  • statistics

  • utilities

Porque:

o verdadeiro programa executa dentro do Db2.


☕ O PADAWAN VIRA MESTRE QUANDO ENTENDE:

“SQL não é uma linguagem de acesso.
SQL é uma linguagem de processamento.”

🔥☕ Welcome to the real mainframe world, padawan.

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. ☕💣