Translate

Mostrar mensagens com a etiqueta Índices DB2. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Índices DB2. Mostrar todas as mensagens

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


sexta-feira, 10 de fevereiro de 2012

☕🔥 SQL QUERYING SKILL NO DB2 MAINFRAME — O FAROL QUE SEPARA “QUEM ESCREVE SQL” DE QUEM DOMINA O SISTEMA

 

Bellacosa Mainframe evoluindo skills em db2 

☕🔥 SQL QUERYING SKILL NO DB2 MAINFRAME — O FAROL QUE SEPARA “QUEM ESCREVE SQL” DE QUEM DOMINA O SISTEMA

Existe uma enorme diferença entre:

SELECT * FROM CLIENTE;

e realmente entender:

🔥 como o DB2 pensa.

E essa diferença muda completamente:

  • performance

  • custo

  • CPU

  • locking

  • concorrência

  • disponibilidade

  • tempo de resposta

Porque no universo IBM Mainframe…

SQL não é apenas linguagem.

🔥 SQL é engenharia operacional.

E a imagem do “farol SQL” mostra isso perfeitamente.

Ela representa uma jornada:

  • iniciante

  • intermediário

  • avançado

que no mundo DB2 for z/OS pode literalmente separar:

  • sistemas estáveis
    de

  • ambientes entrando em colapso silenciosamente.


☕🔥 O FAROL É UMA ANALOGIA PERFEITA PARA O DB2

Pouca gente percebe isso.

Mas DB2 em Mainframe funciona exatamente como um grande sistema de navegação corporativa.


☕ O DB2 precisa guiar:

  • milhões de queries

  • milhares de transações

  • workloads concorrentes

  • aplicações CICS

  • batch COBOL

  • APIs

  • analytics

sem falhar.


☕ Bellacosa Mainframe Analysis™

O SQL Developer não escreve apenas consultas.

🔥 Ele influencia diretamente a saúde do ambiente z/OS inteiro.


☕🔥 NÍVEL BEGINNER — “APRENDENDO A FALAR COM O DB2”

Aqui nasce a maioria dos desenvolvedores.


☕ Conceitos básicos:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • GROUP BY

  • ORDER BY

  • JOINs


☕ Parece simples…

mas já existem armadilhas perigosas.


☕ Exemplo clássico

SELECT *
FROM CLIENTES

☕ Em tabela pequena?

Ok.


☕ Em tabela DB2 corporativa com bilhões de linhas?

🔥 desastre potencial.


☕ O MAINFRAME ENSINA UMA LIÇÃO BRUTAL

Toda query custa recursos.


☕ Recursos significam:

  • CPU

  • I/O

  • bufferpool

  • locks

  • sort

  • memória


☕🔥 QUERY WRITING — O “COBOL MENTAL” DO SQL

Aqui começa a maturidade.


☕ Bons desenvolvedores aprendem:

✅ evitar SELECT *
✅ filtrar corretamente
✅ usar índices
✅ reduzir scans
✅ controlar joins


☕ Porque DB2 NÃO “adivinha intenção”.

Ele segue:
🔥 access paths.


☕🔥 DATA UNDERSTANDING — O SEGREDO QUE MUITA GENTE IGNORA

Essa talvez seja a parte mais importante da imagem.


☕ O problema raramente é apenas SQL.

Frequentemente é:

🔥 modelo de dados ruim.


☕ Exemplo clássico

Campos:

CHAR(500)

para dados minúsculos.


☕ Resultado?

  • desperdício

  • I/O maior

  • cache pior

  • performance degradada


☕ Bellacosa Mainframe Analysis™

Modelagem ruim no DB2 vira:
🔥 dívida técnica por décadas.


☕🔥 INTERMEDIATE — QUANDO O SQL COMEÇA A VIRAR ENGENHARIA

Agora entramos no território dos profissionais perigosos.


☕ Execution Model

Pouca gente entende o pipeline interno do DB2.


☕ Uma query passa por:

PARSING
 ↓
OTIMIZAÇÃO
 ↓
ACCESS PATH
 ↓
EXECUÇÃO

☕ O otimizador DB2 é extremamente sofisticado.


☕ Mas depende de:

  • estatísticas

  • índices

  • cardinalidade

  • distribuição de dados


☕🔥 RUNSTATS — O “ALIMENTO” DO OTIMIZADOR

Sem estatísticas boas:

🔥 o optimizer fica “cego”.


☕ Resultado?

  • table scans gigantes

  • CPU absurda

  • planos ruins


☕ Isso derruba produção REAL.


☕🔥 SYNCHRONISATION — O “TRÂNSITO” DAS TRANSAÇÕES

Agora entramos numa das áreas mais críticas do DB2.


☕ Concorrência.


☕ Milhares de usuários acessando simultaneamente.


☕ Problemas clássicos:

  • deadlocks

  • lock escalation

  • timeout

  • contenção


☕ Bellacosa Mainframe Analysis™

DB2 é praticamente:
🔥 controle aéreo de transações financeiras.


☕ Tudo precisa coexistir sem colisão.


☕🔥 LOCKING — O “RACF” DOS DADOS

O DB2 protege integridade via locking.


☕ Exemplo:

UPDATE CONTA
SET SALDO = SALDO - 100

☕ Enquanto isso outro processo pode tentar alterar a mesma linha.


☕ Sem controle?

🔥 corrupção de dados.


☕ O DB2 leva ACID MUITO a sério.


☕🔥 VIEWS, CTEs E STORED PROCEDURES — O “ABSTRACTION LAYER”

Agora chegamos no SQL mais sofisticado.


☕ Views

Abstração lógica.


☕ CTEs

Queries organizadas e reutilizáveis.


☕ Stored Procedures

Lógica próxima do banco.


☕ Isso reduz:

  • tráfego

  • latência

  • complexidade


☕ Mainframe sempre valorizou:

🔥 processamento perto dos dados.


☕🔥 ADVANCED — O NÍVEL “DB2 WHISPERER”

Agora entramos na elite.


☕ Aqui o profissional entende:

  • EXPLAIN PLAN

  • access path

  • index strategy

  • partitioning

  • concurrency

  • internals


☕ Ele para de perguntar:

“a query funciona?”

e começa perguntar:

“quanto ela custa?”

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

Ferramenta obrigatória.


☕ Ela mostra:

  • scans

  • joins

  • sorts

  • index usage

  • estimated cost


☕ Bellacosa Mainframe Analysis™

EXPLAIN é como:
🔥 um IPCS da query.


☕🔥 INDEXING — A ARTE QUE SALVA OU DESTRÓI PERFORMANCE

Índice é maravilhoso…

até virar excesso.


☕ Muitos índices causam:

  • INSERT lento

  • UPDATE pesado

  • manutenção absurda


☕ Poucos índices causam:

🔥 scans infernais.


☕ O segredo é equilíbrio.


☕🔥 CONCURRENCY ISSUES — O “INFERNO INVISÍVEL”

Sistemas não caem apenas por CPU.


☕ Muitas vezes o problema é:

🔥 contenção.


☕ Exemplo:

10 mil usuários esperando lock.


☕ O ambiente parece “lento”…

mas na verdade está:

  • bloqueado

  • serializado

  • congestionado


☕🔥 MODEL & SYSTEM THINKING — O NÍVEL ARQUITETO

Aqui mora o verdadeiro especialista.


☕ Ele entende:

talvez o problema não seja SQL.


☕ Talvez seja:

  • arquitetura

  • modelagem

  • distribuição

  • workflow

  • volume

  • design transacional


☕ Isso é MUITO Bellacosa Mainframe.

Porque Mainframe sempre pensou:
🔥 sistema inteiro.


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

Ele é:

  • plataforma transacional

  • motor financeiro

  • sistema crítico

  • infraestrutura operacional


☕ Grandes bancos dependem disso diariamente.


☕ PIX.

☕ Cartão.
☕ Bolsa.
☕ Seguros.
☕ Governo.

Tudo passa por bancos de dados extremamente sofisticados.


☕🔥 O MAIOR ERRO DOS DESENVOLVEDORES MODERNOS

Achar que:

hardware resolve tudo

☕ Mainframe ensina exatamente o contrário.


☕ Eficiência importa.

Muito.


☕ Porque escala real é brutal.


☕🔥 CONCLUSÃO — SQL NÃO É SOBRE CONSULTAS… É SOBRE ENTENDER O COMPORTAMENTO DO SISTEMA

Qualquer pessoa aprende SELECT.

Mas poucos realmente entendem:

  • optimizer

  • locking

  • access path

  • cardinalidade

  • modelagem

  • concorrência

  • custo operacional

E talvez essa seja a maior verdade do DB2 for z/OS:

o melhor programador SQL não é o que escreve queries mais “bonitas”.

🔥 É o que consegue fazer bilhões de transações coexistirem sem o sistema sentir dor.