Translate

Mostrar mensagens com a etiqueta Db2 for zOS. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Db2 for zOS. 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ê.


terça-feira, 13 de fevereiro de 2007

O que é DB2 Mainframe?

 

Bellacosa Mainframe  o que é DB2 Mainframe

O que é DB2 Mainframe?

O DB2 for z/OS é o principal sistema gerenciador de banco de dados relacional (RDBMS) da IBM para o ambiente Mainframe IBM Z.

Quando você faz:

  • um PIX;

  • uma transferência bancária;

  • uma consulta de saldo;

  • uma compra com cartão;

há uma grande chance de existir um banco DB2 armazenando ou consultando essas informações.


Definição simples

DB2 é:

um banco de dados relacional corporativo de alta performance.

Ele armazena:

  • clientes;

  • contas;

  • contratos;

  • apólices;

  • transações;

  • produtos;

  • históricos.


Analogia simples

Imagine um enorme arquivo de fichas organizado.

O DB2 permite:

  • guardar informações;

  • localizar rapidamente;

  • atualizar dados;

  • remover registros;

  • relacionar tabelas.


História

O DB2 surgiu na IBM no início da década de 1980.

Foi um dos primeiros bancos comerciais baseados nos conceitos relacionais propostos por:

Edgar F. Codd


O que significa DB2?

Originalmente:

Database 2

Hoje a IBM usa oficialmente:

IBM Db2 for z/OS


Onde o DB2 roda?

Principalmente em:

  • IBM Z

  • z/OS

Mas também existem versões para:

  • Linux

  • Unix

  • Windows


Arquitetura simplificada

Aplicação COBOL
        ↓
SQL
        ↓
DB2
        ↓
Tablespaces
        ↓
Disco

O que é uma tabela?

Local onde os dados são armazenados.


Exemplo

Tabela CLIENTES

IDNOMESALDO
1JOÃO1000
2MARIA5000

Criando uma tabela

CREATE TABLE CLIENTES
(
   ID      INTEGER,
   NOME    VARCHAR(50),
   SALDO   DECIMAL(9,2)
);

O que é SQL?

Structured Query Language.

Linguagem usada para conversar com o DB2.


Comandos mais comuns

SELECT

Consulta dados.

SELECT *
FROM CLIENTES;

INSERT

Inclui registros.

INSERT INTO CLIENTES
VALUES (1,'JOAO',1000);

UPDATE

Atualiza registros.

UPDATE CLIENTES
SET SALDO = 2000
WHERE ID = 1;

DELETE

Remove registros.

DELETE
FROM CLIENTES
WHERE ID = 1;

DB2 e COBOL

Uma das combinações mais famosas da história da computação.


Exemplo

EXEC SQL

   SELECT NOME
   INTO :WS-NOME

   FROM CLIENTES

   WHERE ID = :WS-ID

END-EXEC.

O que é SQL embutido?

SQL escrito dentro do COBOL.

Chamado de:

Embedded SQL


Processo de compilação

COBOL + SQL
      ↓
Precompiler DB2
      ↓
Compilador COBOL
      ↓
Bind
      ↓
Execução

O que é BIND?

Processo que cria:

Package

e

Plan

necessários para execução SQL.


Objetos principais do DB2


Database

Container lógico.


Tablespace

Local físico onde as tabelas ficam.


Table

Armazena dados.


Index

Acelera pesquisas.


View

Consulta virtual.


Synonym / Alias

Nome alternativo.


Exemplo simplificado

DATABASE
   ↓
TABLESPACE
   ↓
TABLE

O que é Tablespace?

Área física onde o DB2 grava os dados.


O que é Index?

Estrutura que acelera consultas.


Sem índice

1
2
3
4
5
...

Procura sequencial.


Com índice

Índice
 ↓
Registro encontrado

Muito mais rápido.


O que é Cursor?

Usado quando um SELECT retorna várias linhas.


Exemplo

DECLARE C1 CURSOR FOR
SELECT NOME
FROM CLIENTES;

Operações com Cursor

DECLARE
   ↓
OPEN
   ↓
FETCH
   ↓
CLOSE

FETCH

Lê uma linha por vez.


SQLCODE

Código de retorno do DB2.

Muito importante.


Exemplos

SQLCODESignificado
0Sucesso
+100Registro não encontrado
-305Valor nulo
-803Chave duplicada
-904Recurso indisponível
-911Deadlock/Rollback

SQLCA

Área de comunicação SQL.


Exemplo

EXEC SQL
   INCLUDE SQLCA
END-EXEC.

O que é COMMIT?

Confirma alterações.


Exemplo

COMMIT;

O que é ROLLBACK?

Desfaz alterações.


Exemplo

ROLLBACK;

Fluxo transacional

UPDATE
   ↓
COMMIT

ou

UPDATE
   ↓
ERRO
   ↓
ROLLBACK

DB2 Online e Batch

Online

Normalmente:

  • CICS

  • IMS TM


Batch

Normalmente:

  • COBOL

  • JCL

  • Scheduler


Ferramentas comuns

  • SPUFI

  • DSNTEP2

  • QMF

  • Data Studio

  • Db2 Admin Tool


Como o DB2 aparece no dia a dia?

Praticamente em:

  • PIX

  • cartões

  • internet banking

  • seguros

  • e-commerce

  • governo


Curiosidades

1. Alguns bancos possuem bancos DB2 com dezenas de terabytes

2. O DB2 processa bilhões de transações diariamente

3. Muitas aplicações COBOL acessam DB2 há mais de 30 anos

4. O DB2 é considerado um dos bancos mais confiáveis do mundo


Erros comuns de iniciantes

Ignorar SQLCODE


Esquecer COMMIT


Não fechar CURSOR


Fazer SELECT sem índice


Não entender SQLCA


Resumo rápido

ConceitoFunção
DB2Banco de dados relacional
SQLLinguagem do DB2
TableArmazena dados
IndexAcelera consultas
CursorPercorre linhas
SQLCARetorno SQL
SQLCODECódigo de retorno
COMMITConfirma
ROLLBACKDesfaz
BINDGera Package/Plan

Conclusão

O DB2 for z/OS é um dos pilares do ecossistema Mainframe IBM Z. Ele fornece armazenamento relacional de alta disponibilidade, segurança e desempenho para aplicações COBOL, CICS, IMS e batch que processam milhões de transações críticas diariamente.