Translate

Mostrar mensagens com a etiqueta Query Optimization. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Query Optimization. Mostrar todas as mensagens

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.