Translate

Mostrar mensagens com a etiqueta INNER JOIN. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta INNER JOIN. Mostrar todas as mensagens

sábado, 24 de novembro de 2018

☕🔥 SQL JOINs NO DB2 MAINFRAME — A ARTE PERIGOSA DE UNIR TABELAS SEM DERRUBAR A PRODUÇÃO

 

Bellacosa Mainframe numa visao dos sql joins em db2

☕🔥 SQL JOINs NO DB2 MAINFRAME — A ARTE PERIGOSA DE UNIR TABELAS SEM DERRUBAR A PRODUÇÃO

Existe um momento em que todo desenvolvedor SQL descobre uma verdade assustadora:

👉 Consultar uma tabela é fácil.

🔥 Difícil é unir múltiplas tabelas em ambiente corporativo REAL sem destruir performance.

E no IBM Mainframe DB2 isso ganha outra dimensão.

Porque JOIN no z/OS não é apenas sintaxe.

É:

  • engenharia de acesso

  • matemática de performance

  • estratégia de índices

  • controle de I/O

  • sobrevivência operacional


☕ O QUE MUITA GENTE NÃO ENTENDE SOBRE JOIN

Nos cursos básicos aparece algo assim:

SELECT *
FROM A
INNER JOIN B
ON A.ID = B.ID

Parece simples.

Mas no DB2 Mainframe essa query pode gerar:

🔥 milhões de GETPAGE
🔥 SORTs monstruosos
🔥 CPU elevada
🔥 lock contention
🔥 access path desastroso


☕ NO MAINFRAME, JOIN É CIRURGIA

Porque estamos falando de tabelas com:

  • bilhões de registros

  • múltiplos índices

  • concorrência extrema

  • milhares de usuários simultâneos


☕🔥 INNER JOIN — O “CASAMENTO OBRIGATÓRIO” DO DB2

O INNER JOIN retorna apenas registros que existem nos dois lados.


☕ Exemplo clássico

Tabela EMPLOYEE

E001  AKHIL
E002  NIKITA
E003  NIL

Tabela JOIN_DATE

E002  2016-04-18
E003  2016-04-19

☕ Query

SELECT
   E.EMP_ID,
   E.FIRST_NAME,
   J.JOINING_DATE
FROM EMPLOYEE E
INNER JOIN JOIN_DATE J
ON E.EMP_ID = J.EMP_ID

☕ Resultado

Somente:

E002
E003

Porque apenas esses possuem correspondência.


☕ Bellacosa Mainframe Analysis™

INNER JOIN é como:

INTERSEÇÃO DE DATASETS CORPORATIVOS

Só sobrevive quem existe nos dois lados.


☕🔥 O ACCESS PATH É O VERDADEIRO REI

O iniciante olha a query.

O DBA Mainframe olha:

🔥 o plano de execução.


☕ O DB2 precisa decidir:

  • qual tabela acessar primeiro

  • qual índice usar

  • qual JOIN METHOD aplicar

  • se haverá SORT

  • se haverá PREFETCH


☕ E aqui nasce a magia (ou o desastre)


☕🔥 NESTED LOOP JOIN — O “LOOP DENTRO DE LOOP”

Estratégia clássica.


☕ Como funciona?

PARA CADA LINHA DA TABELA A
   PROCURE NA TABELA B

☕ Excelente para:

✅ pequenos volumes
✅ índices eficientes
✅ buscas seletivas


☕ Horrível para:

🔥 tabelas gigantes sem índice.


☕ Exemplo mental

É como procurar:

um CPF específico no arquivo do banco.


☕🔥 MERGE SCAN JOIN — O MESTRE DOS GRANDES VOLUMES

Agora entramos no território corporativo pesado.


☕ Funciona melhor quando:

  • dados estão ordenados

  • índices ajudam

  • clustering está correto


☕ O DB2 faz:

TABELA A → ordenada
TABELA B → ordenada

E “caminha” simultaneamente pelas duas.


☕ Isso reduz brutalmente:

  • I/O

  • CPU

  • leitura aleatória


☕ DBA Mainframe AMA Merge Scan.


☕🔥 HYBRID JOIN — O “FRANKENSTEIN” DO OTIMIZADOR

O DB2 mistura estratégias dependendo do cenário.


☕ Porque no z/OS:

🔥 performance é dinâmica.


☕ O que muda?

  • cardinalidade

  • RUNSTATS

  • distribuição

  • volume

  • filtro

  • índice


☕ Mesma query.

☕ Performance completamente diferente.


☕🔥 LEFT JOIN — O “TRAGA TUDO DA ESQUERDA”

Agora chegamos numa armadilha clássica.


☕ Query

SELECT
   E.NAME,
   J.JOIN_DATE
FROM EMPLOYEE E
LEFT JOIN JOIN_DATE J
ON E.ID = J.ID

☕ O que acontece?

Todos os registros da esquerda aparecem.

Mesmo sem correspondência.


☕ Resultado possível

AKHIL   NULL
NIKITA  2016

☕ Isso é MUITO usado em:

  • auditoria

  • relatórios

  • detecção de ausência

  • reconciliação financeira


☕🔥 NULL — O FANTASMA CORPORATIVO

Pouca coisa gera mais bugs que NULL.


☕ NULL não significa:

ZERO
VAZIO
ESPAÇO

☕ NULL significa:

🔥 “valor desconhecido”.


☕ E isso muda toda a lógica SQL.


☕ Exemplo perigoso

WHERE CAMPO = NULL

ERRADO.


☕ Correto:

WHERE CAMPO IS NULL

☕🔥 RIGHT JOIN — O “PRIMO ESQUECIDO”

Tecnicamente útil.

Praticamente raro.


☕ A maioria dos DBAs prefere:

LEFT JOIN

por legibilidade.


☕ Em grandes empresas padronização importa muito.


☕🔥 FULL OUTER JOIN — O “CAOS CONTROLADO”

Agora entramos numa operação pesada.


☕ FULL JOIN retorna:

✅ registros dos dois lados
✅ combinados ou não


☕ Isso é excelente para:

  • reconciliação

  • comparação

  • migração

  • auditoria


☕ Exemplo clássico bancário

SISTEMA A
vs
SISTEMA B

Detectar:

  • faltantes

  • inconsistências

  • divergências


☕🔥 O VERDADEIRO PROBLEMA DOS JOINs

Não é a sintaxe.

É:

🔥 volume.


☕ Uma query inocente pode fazer:

JOIN 5 tabelas gigantes

E gerar:

  • milhões de linhas intermediárias

  • SORTs monstruosos

  • WORKFILES enormes


☕ Resultado?

Batch explode.


☕🔥 WORKFILE — O “INFERNO INVISÍVEL”

Quando DB2 precisa ordenar ou materializar dados:

👉 usa WORKFILE DATABASE.


☕ JOIN ruim pode lotar WORKFILE rapidamente.

E aí começa o sofrimento:

  • slowdown

  • timeout

  • degradação

  • contenção


☕🔥 O SEGREDO DOS DBAs MAINFRAME

O DBA experiente NÃO começa pela query.

Ele começa perguntando:

TEM ÍNDICE?
TEM RUNSTATS?
QUAL A CARDINALIDADE?
QUAL O CLUSTERING?

☕ Porque tuning de JOIN é ciência.


☕🔥 EXPLAIN — O “RAIO-X” DO DB2

Ferramenta absolutamente crítica.


☕ O EXPLAIN mostra:

  • access path

  • join order

  • join method

  • índice usado

  • custo estimado


☕ Sem EXPLAIN…

🔥 você está voando cego no Mainframe.


☕🔥 JOIN + COBOL — O CASAMENTO CORPORATIVO

Grande parte do mundo financeiro funciona assim:

COBOL
 ↓
DB2 JOIN
 ↓
CICS / Batch
 ↓
Transação financeira

☕ O SQL faz o “trabalho pesado”.

O COBOL orquestra.


☕🔥 O QUE O MAINFRAME ENSINA SOBRE SQL

JOIN não é apenas:

ON A.ID = B.ID

JOIN é:

  • arquitetura

  • performance

  • estatística

  • engenharia operacional


☕ Porque em ambientes críticos:

🔥 uma query mal otimizada pode custar milhões.


☕🔥 CONCLUSÃO — SQL JOIN NO DB2 É UMA GUERRA SILENCIOSA

O mundo moderno acha que SQL é apenas linguagem.

O Mainframe sabe que SQL é:

infraestrutura crítica.

E talvez essa seja a maior diferença entre:

  • aprender JOIN
    e

  • sobreviver ao DB2 z/OS em produção.

Porque no fim…

🔥 unir tabelas é fácil.
Difícil é fazer isso sem derrubar o sistema bancário.