Translate

Mostrar mensagens com a etiqueta SQL Performance. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta SQL Performance. Mostrar todas as mensagens

sexta-feira, 26 de janeiro de 2024

SQL sem Mistérios : O Guia Definitivo para um Programador COBOL Padawan Entender por que Performance Não Está no SQL — Está na Forma Como o Banco de Dados Pensa

 

Bellacosa Mainframe e o sql sem misterios

☕ Um Café no Bellacosa Mainframe

SQL sem Mistérios

O Guia Definitivo para um Programador COBOL Padawan Entender por que Performance Não Está no SQL — Está na Forma Como o Banco de Dados Pensa

"No IBM Z aprendemos uma lição muito cedo: escrever um programa COBOL correto é apenas metade do trabalho. A outra metade é fazer com que ele execute milhões de vezes por dia consumindo o mínimo possível de CPU, memória, I/O e tempo de resposta. O mesmo vale para SQL. O segredo nunca esteve apenas na consulta. O segredo sempre esteve no plano de execução."


Introdução

Existe uma ideia que acompanha praticamente todo programador iniciante.

"Se meu SQL está correto, ele será rápido."

Infelizmente isso quase nunca é verdade.

Na realidade, dois comandos SQL visualmente parecidos podem apresentar diferenças de desempenho de centenas ou até milhares de vezes.

O curioso é que ambos retornam exatamente o mesmo resultado.

Como isso é possível?

Porque SQL é uma linguagem declarativa.

Você não diz como o banco deve executar.

Você apenas informa o que deseja obter.

Quem decide como chegar ao resultado é o Query Optimizer, talvez um dos componentes mais sofisticados já criados na Engenharia de Software.

É exatamente nesse ponto que muitos desenvolvedores COBOL descobrem uma das maiores diferenças entre programar aplicações e construir sistemas corporativos de missão crítica.

No Mainframe, especialmente no Db2 for z/OS, performance nunca foi um detalhe.

Ela sempre foi parte da regra de negócio.

Um banco que processa milhões de transações por hora não pode desperdiçar CPU apenas porque alguém escreveu um SQL aparentemente "bonito".


A maior mentira sobre SQL

Quando alguém pergunta:

"Como faço um SQL mais rápido?"

A pergunta correta deveria ser:

"Como faço o otimizador escolher um plano de execução melhor?"

Essa pequena mudança muda completamente a forma de pensar.

O SQL é apenas uma descrição lógica.

Quem faz o trabalho pesado é o banco.

Imagine pedir um táxi.

Você informa:

"Quero ir do aeroporto até o hotel."

Você não diz:

  • qual avenida utilizar;

  • qual velocidade manter;

  • qual ponte atravessar;

  • onde abastecer.

Quem decide isso é o motorista.

Com SQL acontece exatamente a mesma coisa.

Você informa o destino.

O banco decide o caminho.

E esse caminho chama-se:

Execution Plan


O verdadeiro inimigo chama-se I/O

Quando começamos em COBOL normalmente pensamos que CPU é o maior problema.

Depois de alguns anos trabalhando em bancos descobrimos outra realidade.

O maior inimigo geralmente é:

DISCO

Mais precisamente:

I/O

Toda vez que o Db2 precisa buscar páginas em disco, existe um custo.

Imagine uma tabela.

CLIENTES

500 milhões de registros

Você deseja apenas:

CPF = 123456789

Existem dois caminhos.

Primeiro.

Ler

500 milhões

↓

encontrar registro

Segundo.

ÍNDICE

↓

posição

↓

registro

A diferença entre essas duas estratégias pode representar minutos versus milissegundos.

É exatamente isso que o otimizador tenta resolver.


O cérebro invisível do banco de dados

Muita gente acredita que o SQL é executado exatamente como foi escrito.

Na realidade acontece algo muito mais interessante.

Primeiro o banco interpreta.

Depois calcula estatísticas.

Depois verifica índices.

Depois estima custos.

Depois compara algoritmos.

Depois escolhe um plano.

Só então executa.

Na prática ele faz algo semelhante a isto:

SQL

↓

Parser

↓

Optimizer

↓

Statistics

↓

Execution Plan

↓

Runtime

Ou seja...

Antes de executar uma única linha, o banco já simulou diversos cenários.

Esse processo acontece milhares de vezes por segundo.


O pensamento de um especialista IBM Z

Existe uma diferença enorme entre um programador iniciante e um especialista.

O iniciante pergunta:

Meu SQL funciona?

O especialista pergunta:

  • Quantos GETPAGEs ele gera?

  • Quantas páginas serão lidas?

  • Qual Buffer Pool será utilizada?

  • Existe Table Scan?

  • O índice é Matching?

  • Existe Sort?

  • O Join utilizará Hash?

  • Há paralelismo?

  • O RUNSTATS está atualizado?

  • Qual é o custo estimado?

Perceba.

A preocupação deixa de ser o SQL.

Ela passa a ser o comportamento interno do banco.


Primeira regra: reduza trabalho

Uma consulta lenta quase sempre faz trabalho demais.

Veja um erro extremamente comum.

SELECT *
FROM CLIENTES;

Parece inofensivo.

Mas imagine a tabela:

CPF

NOME

EMAIL

ENDEREÇO

TELEFONE

FOTO

OBSERVAÇÃO

SCORE

RENDA

LIMITE

NASCIMENTO

Seu programa COBOL utiliza apenas:

CPF

NOME

Então por que pedir todo o restante?

Cada coluna representa:

  • mais páginas;

  • mais memória;

  • mais tráfego;

  • mais CPU.

O primeiro princípio da engenharia de performance é extremamente simples.

Nunca leia aquilo que você não utilizará.


O índice não é mágica

Outro grande mito.

Muitos acreditam que basta criar índices.

Na prática isso pode piorar tudo.

Cada índice precisa ser atualizado em:

INSERT

UPDATE

DELETE

Quanto mais índices,

mais escrita,

mais manutenção,

mais espaço,

mais CPU.

Por isso especialistas projetam índices observando o comportamento das consultas.

Não existe índice perfeito.

Existe índice adequado para determinada carga de trabalho.


O poder dos índices compostos

Imagine este SQL.

WHERE CPF=?

AND STATUS='A'

Qual índice é melhor?

CPF

ou

CPF

STATUS

O segundo.

Porque acompanha exatamente o padrão utilizado pela consulta.

Esse conceito chama-se:

Composite Index.

No Db2 isso pode eliminar milhares de leituras desnecessárias.


Covering Index: quando a tabela deixa de ser necessária

Poucos conceitos impressionam tanto um programador COBOL quanto este.

Imagine:

SELECT NOME
FROM CLIENTES
WHERE CPF=?

Se existir um índice contendo:

CPF

NOME

o Db2 pode responder utilizando apenas o índice.

A tabela sequer será acessada.

Isso reduz:

  • I/O;

  • CPU;

  • tempo de resposta.

É uma das maiores vitórias do otimizador.


SARGable: a palavra que todo Padawan deveria decorar

Ela parece complicada.

Mas a ideia é simples.

Observe.

Errado.

WHERE YEAR(DATA)=2025

Agora o banco precisa calcular YEAR para milhões de linhas.

O índice praticamente perde sua utilidade.

Agora veja.

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

Aqui o índice pode ser percorrido diretamente.

Esse conceito chama-se:

Search Argument Able

ou simplesmente

SARGable.

Sempre que possível, permita que o banco utilize diretamente seus índices.


EXISTS x IN

Outro assunto clássico.

Muitos iniciantes perguntam:

"Qual é mais rápido?"

A resposta correta é:

"Depende."

Mas existe uma tendência.

Em conjuntos muito grandes,

EXISTS costuma interromper a busca assim que encontra a primeira ocorrência.

Já IN pode exigir estratégias diferentes dependendo do plano escolhido.

O importante não é decorar regras.

É analisar o plano.


Filtrar antes de juntar

Imagine duas tabelas.

CLIENTES

120 milhões
PEDIDOS

800 milhões

Sem filtro:

120 milhões

×

800 milhões

Agora imagine aplicar:

STATUS='ATIVO'

antes do JOIN.

Talvez restem apenas:

2 milhões

×

8 milhões

O banco trabalhará muito menos.

Essa simples mudança pode reduzir drasticamente o custo de execução.


DISTINCT é caro

DISTINCT parece elegante.

Mas por trás dele normalmente existe:

SORT

COMPARAÇÃO

ELIMINAÇÃO

MEMÓRIA

CPU

Em muitos projetos ele aparece apenas para esconder um JOIN incorreto.

O especialista não remove duplicidade.

Ele evita produzi-la.


UNION ou UNION ALL?

Outro clássico.

UNION precisa descobrir registros repetidos.

Para isso geralmente ocorre:

SORT

COMPARE

REMOVE

UNION ALL simplesmente concatena.

Tabela A

+

Tabela B

Sem ordenar.

Sem comparar.

Sem remover.

Em processos ETL isso faz enorme diferença.


O plano de execução é o mapa do tesouro

Imagine um médico sem raio-X.

É exatamente isso que faz quem tenta otimizar SQL sem olhar o plano.

No Db2 utilizamos:

  • EXPLAIN

  • PLAN_TABLE

  • Visual Explain

No PostgreSQL:

EXPLAIN ANALYZE

No SQL Server:

Actual Execution Plan

No Oracle:

EXPLAIN PLAN

O plano revela tudo.

Table Scan

Index Scan

Nested Loop

Merge Join

Hash Join

Sort

Temporary

Parallel

Sem ele praticamente toda otimização é tentativa e erro.


O verdadeiro papel do RUNSTATS

Existe uma armadilha muito comum.

O SQL está perfeito.

Os índices existem.

Mesmo assim o desempenho é ruim.

O problema pode estar nas estatísticas.

No Db2, o utilitário RUNSTATS informa ao otimizador:

  • quantidade de linhas;

  • cardinalidade;

  • distribuição dos valores;

  • quantidade de páginas;

  • fator de clusterização;

  • informações sobre índices.

Sem essas estatísticas, o otimizador toma decisões com base em estimativas imprecisas, aumentando a chance de escolher um plano inadequado.


Partition Pruning: lendo apenas o necessário

Imagine uma tabela dividida por ano.

2021

2022

2023

2024

2025

2026

Sua consulta busca apenas 2026.

Se o particionamento for bem utilizado, o banco ignora todas as demais partições.

Em vez de ler bilhões de linhas, lê apenas a fração necessária.

É uma das técnicas mais importantes para bases corporativas de grande porte.


Os algoritmos invisíveis dos JOINs

Quando você escreve:

JOIN

o Db2 ainda precisa decidir como unir as tabelas.

As principais estratégias são:

Nested Loop Join, ideal para poucos registros e bons índices.

Merge Join, eficiente quando os dados já estão ordenados.

Hash Join, excelente para grandes volumes e junções sem índices seletivos.

A escolha depende de estatísticas, cardinalidade e custo estimado. O mesmo SQL pode gerar algoritmos diferentes conforme os dados evoluem.


O que um Padawan COBOL pode aprender com tudo isso?

Existe um paralelo interessante entre COBOL e SQL.

Quando escrevemos um programa COBOL, evitamos ler um arquivo inteiro se conhecemos a chave do registro.

Não percorremos um VSAM KSDS sequencialmente para localizar uma única conta quando podemos usar a chave primária.

Da mesma forma, no Db2 não devemos obrigar o banco a fazer um table scan quando um índice seletivo resolveria o problema com muito menos trabalho.

A lógica é a mesma: reduzir operações desnecessárias e aproveitar as estruturas de acesso disponíveis.


A Filosofia Bellacosa Mainframe

Ao longo de décadas trabalhando com IBM Z, uma lição se repetiu inúmeras vezes.

Os sistemas mais rápidos raramente eram aqueles escritos pelos programadores mais "geniais".

Eram aqueles escritos por profissionais que entendiam como a infraestrutura pensava.

Eles compreendiam que:

  • CPU custa dinheiro.

  • I/O custa tempo.

  • Memória é finita.

  • Locks geram contenção.

  • Sorts desperdiçam recursos.

  • Estatísticas influenciam decisões.

  • Índices precisam de estratégia.

  • Cada GETPAGE representa trabalho.

  • Cada plano de execução conta uma história.

No universo Mainframe, performance nunca foi um luxo. Sempre foi um requisito funcional.


Palavra Final

Se existe uma única mensagem que este artigo pretende deixar para todo Programador COBOL Padawan, é esta:

Você não otimiza apenas uma instrução SQL. Você otimiza a forma como o banco de dados raciocina sobre ela.

Quando você escreve uma consulta, está apenas descrevendo um objetivo. Quem realmente faz o trabalho é o otimizador, escolhendo índices, algoritmos de JOIN, estratégias de acesso, ordenações e caminhos de execução.

Os grandes especialistas em Db2 para IBM Z não decoram truques. Eles estudam estatísticas, analisam planos de execução, compreendem o comportamento do otimizador e medem continuamente CPU, I/O, GETPAGEs, uso de Buffer Pools e contenção. Eles sabem que um ganho de poucos milissegundos por transação pode representar milhões de operações economizadas ao longo de um ano.

Como ensinamos no Bellacosa Mainframe: o SQL é apenas a pergunta; o plano de execução é a resposta do banco. Quando você aprende a ler essa resposta, deixa de ser apenas um programador que escreve consultas e passa a pensar como um verdadeiro engenheiro de software para sistemas de missão crítica.

No fim das contas, o objetivo não é criar um SQL elegante. É construir aplicações capazes de processar milhões de transações com eficiência, previsibilidade e confiabilidade — exatamente como os grandes ambientes IBM Z fazem há décadas. Esse é o verdadeiro caminho para evoluir de Padawan a Mestre na arte da performance em bancos de dados.


quinta-feira, 7 de setembro de 2023

☕💣 PADAWAN, SUA QUERY ACABOU DE DERRUBAR O CICS?

Bellacosa Mainframe e o padawan perigoso nas querys db2


☕💣 PADAWAN, SUA QUERY ACABOU DE DERRUBAR O CICS?

Como Escrever SELECTs Performáticos no DB2 for z/OS Sem Virar Inimigo do DBA

Existe um momento na vida de todo profissional Mainframe em que ele descobre uma verdade dolorosa:

A query funciona.

Mas a CPU não gosta dela.

O usuário não gosta dela.

O DBA não gosta dela.

E o gerente de produção definitivamente não gosta dela.

O iniciante normalmente pensa:

"Mas ela trouxe o resultado correto."

O DB2 pensa:

"Sim. Depois de ler 800 milhões de linhas."

É aí que nasce a diferença entre um programador SQL e um especialista em performance DB2.

Hoje vamos aprender como analisar uma consulta SQL antes que ela se transforme em um incidente de produção.

Prepare seu café.

Vamos conversar sobre CPU, índices, Access Path e sobrevivência corporativa.


O PRIMEIRO MANDAMENTO

Nunca confie numa query apenas porque ela funciona

Muitos iniciantes executam:

SELECT *
FROM CLIENTES
WHERE CPF='12345678900';

O resultado aparece instantaneamente no ambiente de testes.

Eles ficam felizes.

Mas esquecem que:

  • Teste possui poucos registros

  • Produção possui bilhões

  • Teste tem poucos usuários

  • Produção tem milhares

Uma query aparentemente inocente pode consumir milhares de segundos de CPU diariamente.


PASSO 1 — APRENDA A LER O EXPLAIN

O EXPLAIN é o raio-x da consulta.

Antes de colocar qualquer SQL importante em produção execute:

EXPLAIN PLAN SET QUERYNO = 1001
FOR
SELECT ...

O DB2 gravará informações em tabelas como:

  • PLAN_TABLE

  • DSN_STATEMNT_TABLE

  • DSN_FUNCTION_TABLE

Ali está a verdade.

Não a opinião do desenvolvedor.


PASSO 2 — DESCUBRA O ACCESS PATH

O Access Path é a rota escolhida pelo otimizador.

Você quer ver algo parecido com:

MATCHCOLS = 3
ACCESS = I
INDEX ONLY = Y

Ou seja:

  • usando índice

  • poucas leituras

  • acesso eficiente

Você NÃO quer encontrar:

ACCESS = R

ou

TABLESPACE SCAN

Isso significa:

"Vou ler tudo."

É como procurar um CPF lendo uma lista telefônica inteira.


PASSO 3 — OLHE O MATCHCOLS

Padawan, grave isso.

MATCHCOLS é uma das colunas mais importantes do EXPLAIN.

Suponha índice:

IX01

CPF
AGENCIA
CONTA

Consulta:

WHERE CPF = ?

MATCHCOLS = 1

Excelente.


Consulta:

WHERE CPF = ?
AND AGENCIA = ?

MATCHCOLS = 2

Melhor ainda.


Consulta:

WHERE AGENCIA = ?

MATCHCOLS = 0

Problema.

O DB2 não consegue aproveitar o início do índice.


PASSO 4 — ANALISE A FILTRAGEM

O índice deve reduzir o universo de dados.

Imagine:

Tabela:

100 milhões de linhas

Cláusula:

WHERE SEXO='M'

Se 50 milhões possuem M.

O filtro é ruim.


Agora:

WHERE CPF='12345678900'

Retorna uma linha.

Excelente seletividade.

Quanto mais seletivo, melhor.


PASSO 5 — CUIDADO COM O LIKE

Boa consulta:

WHERE NOME LIKE 'CARLOS%'

Pode utilizar índice.


Consulta perigosa:

WHERE NOME LIKE '%CARLOS%'

O DB2 normalmente perde o acesso direto.

Resultado:

CPU sobe.

GETPAGE sobe.

Tempo sobe.

O DBA chora.


PASSO 6 — EVITE FUNÇÕES NA COLUNA INDEXADA

Ruim:

WHERE YEAR(DATA_NASCIMENTO)=2025

O índice pode ser ignorado.

Melhor:

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

Agora o índice pode ser explorado.


PASSO 7 — NÃO USE SELECT *

Erro clássico:

SELECT *
FROM CLIENTES

O DB2 buscará tudo.

Inclusive colunas que você não precisa.

Melhor:

SELECT
CPF,
NOME,
LIMITE
FROM CLIENTES

Menos I/O.

Menos CPU.

Menos rede.

Menos buffer pool.


PASSO 8 — DESCUBRA SE O ÍNDICE É BOM

Pergunte:

Ele atende o WHERE?

Exemplo:

WHERE CPF=?

Índice:

CPF

Excelente.


Ele atende ORDER BY?

Consulta:

WHERE CPF=?
ORDER BY DATA

Índice:

CPF
DATA

Excelente.

Pode eliminar SORT.


Ele atende JOIN?

Consulta:

CLIENTE.ID
=
PEDIDO.ID_CLIENTE

A coluna do JOIN deveria estar indexada.


PASSO 9 — PROCURE SORTS DESNECESSÁRIOS

O SORT é um consumidor profissional de CPU.

Se aparecer:

SORTN_ORDERBY = Y

investigue.

Talvez um índice resolva.


PASSO 10 — ANALISE O CUSTO ESTIMADO

DB2 12 e DB2 13 fornecem estimativas importantes.

Observe principalmente:

TOTAL_COST
CPU_COST
IO_COST

Ferramentas como:

  • Data Studio

  • Optim Query Workload Tuner

  • IBM Data Server Manager

mostram essas informações de forma amigável.

CPU_COST elevado é sinal de atenção.


PASSO 11 — OLHE OS GETPAGES

DBAs experientes adoram GETPAGE.

Porque ele mostra quantas páginas serão lidas.

Exemplo:

GETPAGE = 100

Ótimo.


GETPAGE = 8.000.000

Hora de revisar a query.


PASSO 12 — VERIFIQUE RUNSTATS

Às vezes a query é boa.

O índice é bom.

Mas as estatísticas são ruins.

Verifique:

RUNSTATS atualizado?

Sem estatísticas confiáveis o otimizador toma decisões erradas.


PASSO 13 — REORG IMPORTA

Um índice pode existir.

Mas estar fragmentado.

Nesse cenário:

  • mais I/O

  • mais CPU

  • mais elapsed time

REORG continua sendo um dos melhores amigos da performance.


PASSO 14 — CUIDADO COM O ONLINE

Batch e Online são mundos diferentes.

No Batch:

5 segundos

Pode ser aceitável.

No Online:

5 segundos

Pode ser uma catástrofe.

Imagine:

1000 usuários simultâneos.

Cada um executando uma query de 5 segundos.

O gargalo nasce rapidamente.


PASSO 15 — A REGRA DE OURO DO PADAWAN

Antes de promover uma query para produção pergunte:

✅ Existe índice?

✅ O índice é utilizado?

✅ O MATCHCOLS é bom?

✅ Existe TABLESPACE SCAN?

✅ Existe SORT desnecessário?

✅ O filtro é seletivo?

✅ Os RUNSTATS estão atualizados?

✅ O GETPAGE está razoável?

✅ O CPU_COST parece aceitável?

✅ O tempo de resposta atende o SLA?

Se alguma resposta for não...

Volte para a oficina.


O SEGREDO DOS MESTRES DB2

Programadores iniciantes escrevem SQL.

Programadores experientes analisam EXPLAIN.

Especialistas DB2 pensam como o otimizador.

Quando você começa a prever qual índice será utilizado, qual access path será escolhido e qual será o impacto em CPU antes mesmo de executar a query, você deixa de ser apenas um desenvolvedor.

Você começa a enxergar o banco pelos olhos do DB2.

E é nesse momento que o Padawan se aproxima do nível Jedi Mainframe.

Porque no universo do DB2, o objetivo não é apenas retornar dados.

O objetivo é retornar dados rapidamente, consumindo o mínimo possível de CPU, evitando filas no CICS, gargalos no DDF, explosões de GETPAGE e telefonemas desesperados da equipe de produção às duas da manhã.

Que a Força do Access Path esteja com você.


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

sábado, 16 de junho de 2018

☕🔥 SQL NO DB2 MAINFRAME — O “SELECT *” QUE PODE DERRUBAR UM BANCO INTEIRO

 

Belalcosa Mainframe e o sql matador de db2

☕🔥 SQL NO DB2 MAINFRAME — O “SELECT *” QUE PODE DERRUBAR UM BANCO INTEIRO

Todo iniciante em SQL aprende algo assim:

SELECT * FROM CLIENTES;

E pensa:

“Pronto. Sei SQL.”

Mas no universo IBM Mainframe + DB2…

isso é apenas o começo da guerra.

Porque no mundo corporativo REAL:

🔥 SQL não é apenas consulta.
SQL é sobrevivência operacional.

Cada comando pode impactar:

  • CPU

  • I/O

  • Buffer Pool

  • Locks

  • Access Path

  • Throughput

  • Batch Window

  • SLA bancário

E é aí que o DB2 z/OS entra em outro nível de engenharia.


☕ O DB2 NÃO FOI FEITO PARA “PROJETINHOS”

O DB2 Mainframe nasceu para:

  • bancos globais

  • bolsas financeiras

  • cartões

  • telecom

  • seguradoras

  • governo

  • processamento massivo

Enquanto bancos menores pensam em simplicidade…

o DB2 pensa em:

🔥 bilhões de linhas simultaneamente.


☕🔥 1. SELECT ALL RECORDS — O COMANDO MAIS PERIGOSO PARA INICIANTES

A famosa query:

SELECT *
FROM EMPLOYEES;

parece inocente.

No DB2 z/OS?

Pode virar tragédia.


☕ O PROBLEMA DO SELECT *

Ele traz:

  • todas as colunas

  • dados desnecessários

  • mais I/O

  • mais GETPAGE

  • mais CPU

  • mais tráfego


☕ Em produção isso custa dinheiro REAL

O profissional Mainframe aprende cedo:

“Nunca peça ao DB2 mais do que você realmente precisa.”


☕ Forma correta:

SELECT
    NAME,
    SALARY
FROM EMPLOYEES;

☕ Por quê?

Porque no Mainframe:

🔥 performance é cultura.


☕ Bellacosa Mainframe Analysis™

SELECT * em produção é como:

COPIAR TODOS OS DATASETS DA EMPRESA
PARA LER APENAS UMA LINHA

☕🔥 2. SELECT SPECIFIC COLUMNS — O PENSAMENTO MAINFRAME

Agora começamos a entrar na mentalidade correta.


☕ Query:

SELECT
    NAME,
    SALARY
FROM EMPLOYEES;

☕ O que o DB2 gosta?

  • menos páginas lidas

  • menos movimentação

  • menos memória

  • menos sorting

  • menos rede


☕ Isso melhora:

✅ cache
✅ buffer pool
✅ response time
✅ throughput


☕ Em APIs REST isso é ainda mais importante

Porque hoje:

APP MOBILE
   ↓
API REST
   ↓
DB2 z/OS

Cada byte importa.


☕🔥 3. WHERE CLAUSE — O VERDADEIRO CAMPO DE BATALHA

Aqui nasce a diferença entre:

🧠 “quem escreve SQL”
e
🔥 “quem entende DB2”.


☕ Exemplo:

SELECT *
FROM EMPLOYEES
WHERE SALARY > 50000;

☕ Parece simples.

Mas o DB2 analisa:

  • índice

  • cardinalidade

  • filter factor

  • clustering

  • access path

  • stage 1/stage 2


☕🔥 STAGE 1 vs STAGE 2

Conceito clássico do DB2 z/OS.


☕ Stage 1

Mais rápido.

Executado próximo ao Data Manager.


☕ Stage 2

Mais CPU.

Mais custo.

Mais sofrimento operacional.


☕ Exemplo RUIM:

WHERE YEAR(DATAADM) = 2025

Pode inutilizar índice.


☕ Melhor:

WHERE DATAADM >= '2025-01-01'
AND DATAADM <  '2026-01-01'

Agora o índice pode respirar.


☕🔥 4. ORDER BY — O SORT INVISÍVEL QUE DEVORA CPU

Agora chegamos numa armadilha clássica.


☕ Query:

SELECT *
FROM EMPLOYEES
ORDER BY SALARY DESC;

☕ O que isso significa internamente?

Possivelmente:

🔥 SORT.

E SORT custa caro.


☕ O DB2 tenta evitar isso usando:

  • índices

  • clustering

  • ordering natural


☕ Exemplo inteligente

Índice:

SALARY DESC

O DB2 pode evitar sort completamente.


☕ DBA Mainframe AMA isso

Porque reduz:

  • tempo batch

  • consumo CPU

  • workfiles


☕🔥 5. GROUP BY — O NASCIMENTO DA INTELIGÊNCIA CORPORATIVA

Agora o SQL começa a virar BI.


☕ Exemplo:

SELECT
    DEPARTMENT,
    COUNT(*)
FROM EMPLOYEES
GROUP BY DEPARTMENT;

☕ Isso parece simples…

Mas alimenta:

  • relatórios financeiros

  • dashboards

  • analytics

  • auditoria

  • compliance


☕ O perigo oculto

GROUP BY pode gerar:

🔥 SORT massivo.


☕ E no DB2 isso significa:

  • WORKFILES

  • TEMP DATABASE

  • I/O pesado

  • CPU alta


☕🔥 O OTIMIZADOR DO DB2 — A ENTIDADE “MISTERIOSA”

Pouca gente entende o poder disso.

O DB2 Optimizer decide:

  • qual índice usar

  • qual join executar

  • qual caminho custa menos


☕ E ele faz isso baseado em:

  • RUNSTATS

  • cardinalidade

  • histogramas

  • distribuição de dados


☕ Sem RUNSTATS atualizado?

🔥 O access path pode virar desastre.


☕ Por isso DBA Mainframe é tão valorizado

Porque tuning em DB2 é quase arte.


☕🔥 LOCKS — O TERROR SILENCIOSO

Aqui começa a engenharia pesada.


☕ Uma query ruim pode causar:

  • lock escalation

  • deadlock

  • timeout

  • contention


☕ Exemplo clássico

SELECT *
FROM CONTAS
FOR UPDATE

Sem critério?

🔥 caos operacional.


☕ No Mainframe milhares acessam simultaneamente

Então concorrência é assunto sagrado.


☕🔥 COMMIT — O DETALHE QUE SALVA PRODUÇÃO

Em batch COBOL + DB2:

EXEC SQL
   COMMIT
END-EXEC

não é detalhe.

É sobrevivência.


☕ Sem COMMIT correto:

  • locks persistem

  • logs crescem

  • rollback explode

  • performance cai


☕🔥 O DB2 NÃO PENSA COMO BANCO “COMUM”

Ele pensa como:

um sistema operacional de dados corporativos.


☕ Porque ele precisa garantir:

✅ integridade
✅ recuperação
✅ disponibilidade
✅ paralelismo
✅ auditoria
✅ performance

24x7.


☕🔥 O QUE O MAINFRAME ENSINA SOBRE SQL

SQL no notebook do estudante:

SELECT *
FROM TESTE;

☕ SQL no Mainframe:

QUAL O IMPACTO DISSO NO BUFFER POOL?
VAI GERAR SORT?
USA ÍNDICE?
QUAL O ACCESS PATH?
VAI CAUSAR LOCK?
TEM RUNSTATS?

☕ É outro universo.


☕🔥 O VERDADEIRO PODER DO DB2

O DB2 não ficou vivo por décadas por acaso.

Ele sobreviveu porque consegue:

🔥 processar absurdos de dados sem parar.


☕ PIX.

☕ cartões.
☕ bolsas financeiras.
☕ reservas aéreas.
☕ telecom.
☕ bancos globais.

Tudo isso continua dependendo de SQL rodando em z/OS.


☕🔥 CONCLUSÃO — SQL NO MAINFRAME NÃO É “LINGUAGEM”

É engenharia de missão crítica.

E talvez essa seja a maior diferença entre:

  • aprender SQL
    e

  • entender DB2 Mainframe.

Porque no fim:

🔥 uma query mal escrita pode custar milhões.

segunda-feira, 12 de março de 2018

☕🔥 SQL NO DB2 MAINFRAME — A LINGUAGEM QUE MOVE O DINHEIRO DO PLANETA (E QUE MUITA GENTE USA SEM ENTENDER)

 

Bellacosa Mainframe e a linguagem sql do db2

☕🔥 SQL NO DB2 MAINFRAME — A LINGUAGEM QUE MOVE O DINHEIRO DO PLANETA (E QUE MUITA GENTE USA SEM ENTENDER)

Hoje existe uma geração inteira que aprendeu SQL em:

  • MySQL

  • PostgreSQL

  • SQL Server

  • SQLite

  • cursos rápidos de Data Analytics

E aí nasce uma ilusão perigosa:

“SQL é só SELECT.”

Só que quando alguém entra no universo do DB2 Mainframe…

descobre rapidamente que SQL corporativo REAL é outra dimensão.

Porque no IBM Mainframe, SQL não é apenas consulta.

🔥 SQL no DB2 é infraestrutura crítica mundial.

É ele que movimenta:

  • bancos

  • cartões

  • seguradoras

  • bolsas de valores

  • governos

  • companhias aéreas

  • telecomunicações

E o mais impressionante:

👉 Grande parte do planeta depende diariamente de comandos SQL rodando em DB2 no z/OS.


☕ O QUE TORNA O DB2 MAINFRAME DIFERENTE?

Muita gente pensa:

“SQL é tudo igual.”

Não.

O DB2 z/OS foi construído para:

  • altíssimo volume

  • concorrência extrema

  • integridade transacional

  • recuperação sofisticada

  • segurança corporativa

  • bilhões de linhas

  • milhares de usuários simultâneos

Enquanto bancos menores focam simplicidade…

o DB2 Mainframe foi projetado para sobreviver ao caos corporativo.


☕🔥 SECTION 1 — SELECT: O COMANDO MAIS SUBESTIMADO DA HISTÓRIA

Todo mundo aprende:

SELECT * FROM CLIENTES;

E acha que domina SQL.

No Mainframe isso pode virar um desastre.


☕ O “SELECT *” É QUASE UMA HERESIA NO DB2

Em ambientes críticos:

SELECT *

pode causar:

  • I/O desnecessário

  • uso excessivo de buffer pool

  • degradação de CPU

  • aumento de GETPAGE

  • piora no access path


☕ O PROFISSIONAL MAINFRAME PENSA DIFERENTE

Ele faz:

SELECT
    NOME,
    SALDO,
    LIMITE
FROM CLIENTES
WHERE ID_CLIENTE = :WS-ID

Somente os campos necessários.


☕ Por quê?

Porque no z/OS:

🔥 performance é religião.


☕🔥 O OTIMIZADOR DO DB2 É UMA ENTIDADE QUASE “VIVA”

Pouca gente entende isso.

O DB2 Optimizer:

  • escolhe access path

  • decide índice

  • calcula custo

  • analisa estatísticas

  • estima cardinalidade

Tudo automaticamente.


☕ Exemplo clássico

Mesma query.

Dois ambientes.

Performances totalmente diferentes.

Por quê?

Porque:

  • RUNSTATS mudou

  • índices mudaram

  • volume mudou

  • clustering mudou

O Optimizer escolheu outro caminho.


☕🔥 SECTION 2 — WHERE: O LUGAR ONDE NASCEM AS GUERRAS DE PERFORMANCE

Aqui mora o verdadeiro poder do SQL.


☕ Exemplo simples

SELECT *
FROM CONTAS
WHERE CPF = '12345678900'

☕ Parece inocente…

Mas no DB2 Mainframe isso envolve:

  • matching columns

  • indexability

  • stage 1/stage 2 predicates

  • filter factor

  • synchronous I/O

  • list prefetch


☕🔥 STAGE 1 vs STAGE 2 — O TERROR DOS INICIANTES

No DB2:

Stage 1

Mais eficiente.

Executado mais próximo do Data Manager.


Stage 2

Mais custoso.

Mais CPU.

Mais processamento.


☕ Exemplo ruim

WHERE YEAR(DATA) = 2025

Pode inutilizar índice.


☕ Melhor abordagem

WHERE DATA >= '2025-01-01'
AND DATA <  '2026-01-01'

Agora o índice pode trabalhar.

🔥 Isso é mentalidade mainframe.


☕🔥 SECTION 3 — ORDER BY: O “SORT INVISÍVEL” QUE DESTRÓI BATCHES

Muita gente não percebe:

ORDER BY

quase sempre significa:

🔥 SORT.

E SORT em grandes volumes pode custar caro.


☕ O que o DB2 tenta fazer?

Evitar sort.


☕ Como?

Usando índice na ordem correta.

Exemplo:

Índice:

CPF ASC

Query:

ORDER BY CPF

O DB2 pode evitar sort completamente.


☕🔥 SECTION 4 — FUNÇÕES DE AGREGAÇÃO: O PODER ANALÍTICO CORPORATIVO

Aqui o DB2 vira máquina de inteligência.


☕ COUNT

SELECT COUNT(*)
FROM TRANSACOES

☕ Em Mainframe isso pode significar:

  • milhões

  • bilhões

  • trilhões

de registros.


☕ O detalhe assustador

Em grandes ambientes:

COUNT(*)

mal otimizado pode consumir recursos absurdos.


☕🔥 SUM e AVG NO MUNDO FINANCEIRO

SELECT SUM(VALOR)
FROM PIX

Isso movimenta literalmente bilhões de reais.


☕ Precisão no Mainframe é crítica

Erro de arredondamento?

🔥 Catástrofe financeira.


☕🔥 SECTION 5 — GROUP BY: O CÉREBRO DOS RELATÓRIOS CORPORATIVOS

O GROUP BY é onde SQL começa a parecer inteligência artificial corporativa.


☕ Exemplo

SELECT
    AGENCIA,
    SUM(SALDO)
FROM CONTAS
GROUP BY AGENCIA

☕ Isso permite:

  • analytics

  • BI

  • auditoria

  • relatórios financeiros

  • antifraude


☕ O perigo oculto

GROUP BY pode gerar:

  • grandes SORTs

  • WORKFILES gigantes

  • uso excessivo de TEMP DB


☕🔥 SECTION 6 — HAVING: O FILTRO “PÓS-INTELIGÊNCIA”

HAVING filtra após agregação.


☕ Exemplo

SELECT
    AGENCIA,
    COUNT(*)
FROM CONTAS
GROUP BY AGENCIA
HAVING COUNT(*) > 1000

☕ O detalhe técnico

HAVING normalmente custa mais que WHERE.

Porque:

  • primeiro agrega

  • depois filtra


☕🔥 SECTION 7 — JOINS: O CAMPO DE BATALHA DO DB2

Aqui mora a verdadeira engenharia SQL.


☕ Nested Loop Join

Bom para pequenos volumes.


☕ Merge Scan Join

Excelente para grandes conjuntos ordenados.


☕ Hybrid Join

Mistura estratégias.


☕ O DBA Mainframe vive disso

Analisando:

  • PLAN_TABLE

  • EXPLAIN

  • access path

  • RID list

  • prefetch


☕ Exemplo clássico

SELECT *
FROM CLIENTE C
JOIN CONTA X
ON C.ID = X.ID_CLIENTE

☕ Parece simples…

Mas por trás o DB2 pode fazer:

  • tablespace scan

  • index scan

  • sort merge

  • parallelism


☕🔥 SECTION 8 — LIMIT/FETCH FIRST: O SALVADOR DA CPU

No mundo distribuído usam:

LIMIT 10

No DB2 z/OS:

FETCH FIRST 10 ROWS ONLY

☕ Isso reduz:

  • CPU

  • I/O

  • tempo de resposta


☕ Muito usado em:

  • APIs REST

  • dashboards

  • consultas online

  • mobile


☕🔥 SECTION 9 — ALIAS: A LEITURA HUMANA DO CAOS

Grandes queries corporativas ficam monstruosas.

Alias salva vidas.


☕ Exemplo

SELECT
    C.NOME,
    X.SALDO
FROM CLIENTE C,
     CONTA X

☕ Sem alias?

Viraria insanidade visual.


☕🔥 SECTION 10 — CASE: A INTELIGÊNCIA EMBUTIDA NO SQL

CASE transforma SQL em mecanismo decisório.


☕ Exemplo

SELECT
CASE
   WHEN SALDO < 0
      THEN 'DEVEDOR'
   ELSE 'POSITIVO'
END
FROM CONTAS

☕ O Mainframe usa isso em:

  • scoring

  • antifraude

  • classificação

  • regras de negócio

  • compliance


☕🔥 O QUE OS CURSOS DE SQL NORMALMENTE NÃO ENSINAM

No DB2 Mainframe existem conceitos avançados gigantescos:

  • locking

  • isolation level

  • package

  • bind

  • commit

  • rollback

  • UR/CS/RS/RR

  • deadlock

  • claim/drain

  • RID pool

  • EDM pool

  • buffer pool

Aí o jogo muda completamente.


☕🔥 O DB2 NÃO É “SÓ UM BANCO”

Ele é:

um sistema operacional de dados corporativos.


☕🔥 A GRANDE VERDADE

O SQL que roda no notebook do estudante…

e o SQL que roda no z/OS…

podem parecer iguais.

Mas estão separados por:

  • escala

  • criticidade

  • engenharia

  • confiabilidade

  • performance

  • complexidade


☕🔥 CONCLUSÃO — SQL NO MAINFRAME NÃO É MODA. É SOBREVIVÊNCIA.

No mundo moderno:

  • apps falham

  • containers reiniciam

  • microsserviços quebram

Mas o DB2 continua lá.

Processando:

  • pagamentos

  • cartões

  • PIX

  • reservas aéreas

  • bolsas financeiras

24x7.

E talvez essa seja a maior lição do Mainframe:

🔥 “SQL não é apenas consulta.
É a linguagem silenciosa que mantém a economia mundial funcionando.”


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