☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta locks. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta locks. Mostrar todas as mensagens

domingo, 18 de janeiro de 2026

💣 DB2 Troubleshotting

Bellacosa Mainframe Db2 Troubleshotting

💣 DB2 Troubleshotting

💣 1. DEADLOCK — “o abraço da morte”

🧪 Cenário real

Transação A:

UPDATE CLIENTES SET NOME='ANA' WHERE ID=1;

Transação B:

UPDATE CLIENTES SET NOME='JOAO' WHERE ID=2;

👉 Depois:

  • A tenta atualizar ID=2
  • B tenta atualizar ID=1

💥 BOOM → deadlock


🧠 O que aconteceu?

Cada transação:

  • segura um lock
  • espera o lock da outra

👉 Db2 detecta e mata uma delas


💥 Sintoma clássico

SQLCODE = -911
REASON CODE = 00C90088

🔍 Diagnóstico

  • IFCID 172 (trace)
  • DISPLAY DATABASE LOCKS
  • Monitoramento (OMEGAMON)

🛠️ Soluções

✔ Acessar tabelas sempre na mesma ordem
✔ Reduzir tempo de transação
✔ Usar COMMIT mais frequente
✔ Evitar “holding locks” por muito tempo

💡 Regra de ouro:

Ordem consistente = evita deadlock


⚠️ 2. LOCK ESCALATION — “quando o Db2 perde a paciência”

🧪 Cenário real

Você roda:

UPDATE CLIENTES SET STATUS='A';

👉 Sem WHERE 😬


🧠 O que acontece?

  • Começa com row locks
  • Muitos locks acumulam
  • Db2 sobe para table lock

💥 Resultado:

Ninguém mais acessa a tabela


💥 Sintoma

  • Lentidão geral
  • Jobs travados
  • Reclamação do usuário 😅

🔍 Diagnóstico

  • IFCID 196
  • Monitoramento de locks
  • DSNZPARM (NUMLKTS / NUMLKUS)

🛠️ Soluções

✔ Sempre usar WHERE
✔ Commit em blocos (batch)
✔ Ajustar parâmetros de lock
✔ Usar LOCKSIZE adequado

💡 Bellacosa insight:

UPDATE sem WHERE é pedido formal de incidente 🚨


🚀 3. ACCESS PATH — “o plano invisível que decide tudo”

🧪 Cenário real

SELECT * FROM CLIENTES WHERE ID = 1;

👉 Parece simples… mas:

  • Usa índice? ⚡
  • Ou faz table scan? 🐢

🧠 O que é Access Path?

👉 Caminho que o otimizador escolhe para acessar os dados


🔍 Como ver?

EXPLAIN PLAN FOR
SELECT * FROM CLIENTES WHERE ID = 1;

👉 Consulta tabela PLAN_TABLE


💥 Possibilidades

TipoImpacto
Index scanRápido ⚡
Table scanLento 🐢
Nested loopBom
SortCusto extra

🛠️ Otimização

✔ Criar índice correto
✔ Atualizar RUNSTATS
✔ Evitar SELECT *
✔ Filtrar bem no WHERE


💡 Exemplo prático

❌ Ruim:

SELECT * FROM CLIENTES;

✅ Melhor:

SELECT NOME FROM CLIENTES WHERE ID = 1;

🧠 VISÃO DE PRODUÇÃO (OURO!)

🔥 Deadlock

👉 Problema de concorrência


🔥 Lock escalation

👉 Problema de volume de locks


🔥 Access path

👉 Problema de performance


💣 CHECKLIST RÁPIDO (salva carreira)

Antes de subir para produção:

✔ Tem índice?
✔ Tem WHERE?
✔ Tem COMMIT?
✔ Rodou EXPLAIN?
✔ RUNSTATS atualizado?


😎 FRASES DE SENIOR (pra usar na daily)

  • “Isso tá com cara de access path ruim”
  • “Provavelmente lock escalation”
  • “Vamos revisar o EXPLAIN antes de mexer”
  • “Isso aí vai dar -911 em produção”

terça-feira, 14 de maio de 2019

O Mistério do Carimbo Invisíve : Descobriu que Milhões de Transações Dependiam de uma Palavra Chamada SYNCPOINT

 

Bellacosa Mainframe e o misterio do carimbo invisivel

☕ Um Café no Bellacosa Mainframe

O Mistério do Carimbo Invisível

Quando um Jovem Programador COBOL Descobriu que Milhões de Transações Dependiam de uma Palavra Chamada SYNCPOINT

"Toda cidade possui um juiz invisível. No CICS, ele atende pelo nome de SYNCPOINT."


Era pouco depois das duas da manhã.

No CPD, apenas o som ritmado dos equipamentos IBM preenchia o ambiente. As luzes verdes piscavam como estrelas artificiais em um universo onde bilhões de bytes viajavam silenciosamente pelos canais do mainframe.

O jovem programador Henrique havia acabado de terminar sua primeira rotina de transferência bancária em COBOL.

Estava orgulhoso.

O programa compilava.

Não havia nenhum S0C7.

Nenhum AEI9.

Nenhum ASRA.

Tudo parecia perfeito.

Mas o velho analista Augusto Bellacosa apenas sorriu, tomou mais um gole de café e perguntou:

"Muito bonito... mas quem garante que o dinheiro realmente chegou ao destino?"

Henrique congelou.

— "Como assim?"

Augusto levantou uma sobrancelha.

"Você escreveu um programa. Ainda não escreveu uma transação."

Naquela madrugada, Henrique descobriria um dos maiores segredos do CICS.

Um segredo invisível.

Chamado...

SYNCPOINT.


O que realmente é um SYNCPOINT?

Todo iniciante imagina que um programa executa linha após linha e, no final, tudo fica gravado.

No mundo do CICS isso não funciona assim.

Na verdade, o CICS trabalha com um conceito muito mais sofisticado chamado:

Unit of Work (UOW).

Uma Unit of Work é um conjunto de operações que pertencem à mesma missão.

Imagine um detetive dos filmes noir dos anos 1950.

Ele recebe um envelope.

Dentro dele existem quatro documentos.

Nenhum pode desaparecer.

Nenhum pode ser trocado.

Nenhum pode ser perdido.

Somente quando todos estiverem completos ele coloca um enorme carimbo vermelho escrito:

CONFIRMADO

Esse carimbo é o SYNCPOINT.

Até esse momento...

Nada é definitivo.


A grande mentira que todo iniciante acredita

Muitos programadores pensam:

"Fiz um REWRITE.

O registro já está salvo."

Não.

Essa é uma das maiores armadilhas do CICS.

Na realidade acontece isto:

READ UPDATE

↓

Registro bloqueado

↓

Programa altera memória

↓

REWRITE

↓

Registro continua pertencendo à transação

↓

SYNCPOINT

↓

Agora sim tudo ficou permanente.

O REWRITE altera.

O SYNCPOINT confirma.

São responsabilidades completamente diferentes.


Imagine um Cartório

Pense em um contrato.

Você assina.

A outra pessoa assina.

As testemunhas assinam.

Mas...

Enquanto o tabelião não colocar o selo oficial...

Nada possui validade jurídica.

O SYNCPOINT é exatamente esse selo.


O nascimento da Unit of Work

Toda transação CICS começa discretamente.

Usuário entra

↓

Programa inicia

↓

Lê arquivos

↓

Atualiza DB2

↓

Atualiza VSAM

↓

Grava TSQ

↓

Envia MQ

↓

...

Tudo isso ainda pertence à mesma história.

É apenas quando aparece:

EXEC CICS
     SYNCPOINT
END-EXEC.

que aquela história ganha um final definitivo.


O CICS possui memória fotográfica

Pouca gente sabe disso.

Enquanto você altera registros, o CICS praticamente fotografa o estado anterior dos dados.

Por quê?

Porque talvez precise voltar tudo.

Imagine um pintor restaurando um quadro do século XVIII.

Antes de tocar na tinta original ele tira dezenas de fotografias.

Caso algo dê errado...

Pode restaurar exatamente como estava.

O CICS faz algo parecido através dos mecanismos de recuperação e journals.


O poder escondido do Journal

Existe um personagem que quase nunca aparece nas apostilas.

O Journal.

Ele é como o diário secreto do sistema.

Ali ficam registrados acontecimentos suficientes para permitir que a recuperação seja feita com segurança.

É graças a ele que o CICS consegue dizer:

"Se algo der errado, sei exatamente como desfazer."

Sem Journal...

Rollback seria praticamente impossível.


O verdadeiro significado do COMMIT

A maioria pensa que COMMIT significa:

Gravar.

Na realidade significa muito mais.

Quando acontece um SYNCPOINT o CICS:

✔ confirma alterações no DB2

✔ confirma alterações VSAM

✔ confirma recursos recuperáveis

✔ sincroniza todos os participantes da transação

✔ grava informações de recuperação

✔ encerra a Unit of Work

✔ libera todos os locks

✔ informa aos Resource Managers que tudo terminou corretamente

É quase como um maestro encerrando uma sinfonia.


O Tribunal Supremo das Transações

Imagine um julgamento.

Cinco testemunhas.

Quatro advogados.

Um juiz.

Todos apresentam suas provas.

No final...

O juiz fala apenas uma palavra.

"Culpado."

Ou

"Inocente."

Não existe meio culpado.

O SYNCPOINT funciona exatamente assim.

Todos os recursos esperam a decisão final.


O fantasma chamado Rollback

Agora imagine outro cenário.

Henrique faz uma transferência.

Conta A

↓

Debita R$ 5.000

↓

Conta B

↓

Erro no VSAM

Sem rollback:

Conta A perdeu dinheiro.

Conta B não recebeu.

Dinheiro evaporou.

Imagine isso acontecendo milhões de vezes.

Nenhum banco sobreviveria.

Então entra em cena o segundo personagem desta história.

EXEC CICS
     SYNCPOINT ROLLBACK
END-EXEC.

O CICS olha para trás.

Lê sua memória.

E desfaz tudo.

Como se nada tivesse acontecido.

É quase uma máquina do tempo.


O poder da viagem temporal

Poucas tecnologias conseguem fazer isso tão elegantemente.

Rollback literalmente faz o sistema voltar alguns segundos.

Não todo o computador.

Apenas aquela Unit of Work.

É como rebobinar somente uma cena do filme.


Um erro clássico dos iniciantes

Henrique perguntou:

— "Então posso fazer commit depois de cada registro?"

Augusto quase derrubou o café.

— "Claro que pode."

Henrique sorriu.

Então Augusto completou.

— "E também pode destruir toda a performance do sistema."

Commits possuem custo.

Cada um envolve sincronização.

Logs.

Liberação de locks.

Comunicação entre Resource Managers.

Por isso existe um equilíbrio delicado.

Nem commits demais.

Nem commits de menos.


Quando não fazer commit?

Imagine atualizar cem registros.

Se fizer cem commits...

O sistema gastará muito tempo apenas encerrando Units of Work.

Agora imagine atualizar dez milhões de registros.

Fazer apenas um commit no final também pode ser um desastre.

Locks ficarão presos durante muito tempo.

O segredo está no equilíbrio.

Esse é um dos motivos pelos quais arquitetos de sistemas estudam cuidadosamente o tamanho ideal da UOW.


O segredo dos Locks

Outro mistério.

Muitos acreditam:

READ UPDATE

↓

REWRITE

↓

Registro liberado

Não.

O lock continua.

Somente o commit libera.

Isso explica diversos problemas de contenção.

Enquanto uma transação segura um registro...

Outra precisa esperar.


ENQ, DEQ e SYNCPOINT

Lembra dos comandos ENQ e DEQ?

Eles são parentes próximos do SYNCPOINT.

Imagine uma biblioteca.

Você pega um livro raro.

Enquanto ele está emprestado ninguém mais pode utilizá-lo.

O ENQ reserva.

O DEQ devolve.

Já o SYNCPOINT garante que todo o processo envolvendo aquele livro foi concluído corretamente antes de liberar os demais recursos associados à transação.

São mecanismos diferentes, mas frequentemente trabalham em harmonia para preservar a consistência da aplicação.


E se o computador desligar?

Essa é uma das perguntas favoritas das entrevistas IBM.

Imagine:

UPDATE DB2

↓

UPDATE VSAM

↓

Queda de energia

O CICS consulta seus registros de recuperação.

Percebe que aquela Unit of Work nunca terminou.

Resultado?

Backout automático.

O usuário talvez nem perceba.

Esse comportamento é uma das razões pelas quais bancos confiam no CICS há mais de cinco décadas.


A ligação com o DB2

Quando DB2 participa da transação, ele também espera.

Nenhuma alteração fica permanente até que o SYNCPOINT seja executado.

É como vários cofres aguardando a mesma chave.

Somente quando a chave gira...

Todos são fechados simultaneamente.


VSAM também participa

Da mesma forma:

READ UPDATE

↓

REWRITE

↓

DELETE

↓

WRITE

Tudo permanece dentro da mesma Unit of Work.

O VSAM somente considera as alterações definitivamente concluídas quando o CICS encerra a transação com sucesso.


O relacionamento com HANDLE ABEND

Em artigos anteriores vimos o HANDLE ABEND.

Agora tudo faz sentido.

HANDLE ABEND

↓

Erro inesperado

↓

Rotina de recuperação

↓

SYNCPOINT ROLLBACK

↓

RETURN

Observe como as peças começam a formar um quebra-cabeça.

O conhecimento em CICS é cumulativo.

Cada comando reforça o entendimento do anterior.


Curiosidade Histórica

Nos primeiros anos do CICS, quando bancos começaram a abandonar sistemas baseados em processamento puramente batch para operações online, um dos maiores medos era exatamente este:

"E se o sistema cair no meio de uma transferência?"

Foi o amadurecimento dos mecanismos de recuperação, journals, locks e SYNCPOINT que permitiu o crescimento dos caixas eletrônicos, do internet banking e, décadas mais tarde, dos aplicativos móveis.

Cada saque em um caixa eletrônico, cada pagamento de boleto e cada transferência eletrônica dependem, direta ou indiretamente, desses princípios.


Curiosidade Técnica

Você provavelmente já ouviu falar nas propriedades ACID dos bancos de dados.

O SYNCPOINT é uma das peças fundamentais que ajuda a concretizar esses princípios dentro do ambiente transacional do CICS:

  • Atomicidade: tudo acontece ou nada acontece.

  • Consistência: os dados permanecem válidos.

  • Isolamento: outras transações não enxergam alterações incompletas.

  • Durabilidade: após o commit, as mudanças sobrevivem até mesmo a falhas do sistema.


Dicas para quem está aprendendo COBOL+CICS

✔ Sempre pense em termos de negócio, não apenas de comandos.

✔ Antes de programar pergunte:

"Se ocorrer um erro aqui... o que deve voltar?"

✔ Nunca esqueça que REWRITE não significa commit.

✔ Aprenda a visualizar uma Unit of Work inteira antes de escrever uma linha de código.

✔ Conheça RESP e RESP2 para tratar erros antes de decidir entre continuar ou executar um rollback.

✔ Estude os journals e os mecanismos de recuperação. Eles raramente aparecem nos primeiros cursos, mas fazem enorme diferença para compreender como o CICS realmente funciona.


Easter Egg Bellacosa ☕

Existe uma antiga lenda entre programadores veteranos de mainframe.

Dizem que, nas madrugadas em que o CPD está silencioso e apenas o z/OS continua trabalhando, é possível imaginar um enorme carimbo invisível passando de transação em transação.

Cada vez que um SYNCPOINT é executado com sucesso, esse carimbo marca silenciosamente:

"Integridade preservada."

Ninguém vê.

Nenhum operador escuta.

Nenhuma tela 3270 exibe essa mensagem.

Mas, graças a esse "carimbo invisível", milhões de pessoas acordam pela manhã e encontram seus saldos bancários exatamente onde deveriam estar.

Talvez esse seja o maior elogio que uma tecnologia possa receber: funcionar tão bem que quase ninguém percebe sua existência.


O Arquivo Confidencial Bellacosa

Nome do Caso: O Carimbo Invisível

Suspeitos: REWRITE, WRITE, DELETE, UPDATE, DB2, VSAM

Investigador Principal: CICS Transaction Manager

Juiz da Operação: SYNCPOINT

Plano de Fuga: SYNCPOINT ROLLBACK

Cúmplices: Journals, Locks, Unit of Work, Resource Managers

Veredito Final: Nenhuma transação recuperável deve terminar pela metade.


Conclusão

O SYNCPOINT é muito mais do que um simples comando do CICS. Ele representa a fronteira entre o provisório e o permanente, entre uma alteração ainda reversível e uma decisão definitiva. É ele quem encerra a Unit of Work, confirma atualizações em recursos como Db2, VSAM, filas recuperáveis e outros gerenciadores de recursos, libera bloqueios e garante que todas as partes da transação caminhem juntas.

Seu contraponto, o SYNCPOINT ROLLBACK, oferece ao sistema a capacidade de voltar atrás quando algo inesperado acontece, preservando a integridade dos dados e evitando inconsistências que poderiam comprometer operações críticas.

Quando um programador COBOL entende verdadeiramente conceitos como READ UPDATE, REWRITE, ENQ, DEQ, HANDLE ABEND, journals, locks, Unit of Work e SYNCPOINT, ele deixa de apenas escrever programas e passa a compreender a engenharia invisível que mantém bancos, seguradoras, companhias aéreas e grandes empresas funcionando de forma confiável há décadas.

No fim das contas, o maior mistério do CICS nunca foi sua velocidade, nem sua idade, nem mesmo sua capacidade de processar milhões de transações por segundo.

O verdadeiro mistério é que, enquanto o mundo dorme, um pequeno comando com apenas nove letras continua decidindo, silenciosamente, o destino de fortunas, contratos, reservas de voo, prontuários médicos e incontáveis operações críticas.

E como diria Augusto Bellacosa ao terminar mais uma xícara de café diante do brilho esverdeado de um terminal 3270:

"Programas escrevem dados. Transações escrevem confiança. E confiança... sempre termina com um SYNCPOINT."

sexta-feira, 26 de abril de 2019

O Mistério do Cadeado Invisível : Descobriu que Milhões de Pessoas Esperavam por uma Chave que Ninguém Conseguia Ver

 

Bellacosa Mainframe e o misterio do cadeado invisivel

☕ Um Café no Bellacosa Mainframe

O Mistério do Cadeado Invisível

Quando um Jovem Programador COBOL Descobriu que Milhões de Pessoas Esperavam por uma Chave que Ninguém Conseguia Ver

"Toda grande cidade possui cofres. Todo banco possui segredos. Todo sistema possui um guardião invisível. E, no silencioso universo do CICS, esse guardião atende por dois nomes: ENQ e DEQ."


As luzes do CPD eram fracas.

O ar-condicionado soprava continuamente, como se respirasse em nome das milhares de transações que cruzavam os cabos de fibra óptica.

Era quase meia-noite.

As impressoras de produção já haviam diminuído o ritmo, os operadores do console observavam atentamente as mensagens do sistema e, em uma pequena sala iluminada apenas pelo brilho verde de um terminal 3270, um jovem programador COBOL fazia uma pergunta aparentemente simples.

Se dois usuários alterarem o mesmo registro exatamente no mesmo instante... quem vence?

O veterano sorriu.

Levantou lentamente uma velha caneca onde se lia:

Bellacosa Mainframe Café

Tomou um gole.

Olhou para o painel do CICS.

E respondeu apenas:

Depende de quem pegar a chave primeiro...

O rapaz olhou confuso.

— Que chave?

O veterano respondeu:

A chave que ninguém vê.

Naquela noite, ele descobriria um dos maiores mistérios do processamento transacional moderno.

O ENQ.


O Problema que Existe Desde que Computadores Aprenderam a Trabalhar Juntos

Quem está começando em COBOL normalmente imagina que um programa executa sozinho.

Mas isso nunca acontece em um ambiente CICS.

Enquanto você lê este artigo, existem sistemas bancários processando dezenas de milhares de transações por segundo.

Imagine um único banco.

Ao mesmo tempo existem:

  • aplicativo móvel;

  • Internet Banking;

  • caixas eletrônicos;

  • PIX;

  • TED;

  • cartão de crédito;

  • empréstimos;

  • agências;

  • sistemas antifraude;

  • APIs REST;

  • Web Services;

  • filas MQ;

  • processamento batch.

Todos querendo acessar os mesmos dados.

O problema não é escrever programas.

O problema é impedir que eles se matem.


O Fantasma da Concorrência

Existe um vilão invisível.

Seu nome é:

Concorrência.

Ela não aparece em mensagens de erro.

Não gera ABEND.

Não produz dump.

Mas pode destruir milhões de reais em poucos segundos.

Imagine duas pessoas alterando a mesma conta.

Saldo atual:

R$ 10.000

Cliente A faz:

Saque

R$ 1.000

Cliente B faz:

Depósito

R$ 2.000

Ambos começam exatamente no mesmo milissegundo.

Os dois leem:

R$ 10.000

Programa A grava:

R$ 9.000

Programa B grava:

R$ 12.000

O saque desapareceu.

Dinheiro simplesmente evaporou.

Nenhum hacker.

Nenhum vírus.

Nenhum criminoso.

Apenas dois programas trabalhando rápido demais.

Esse fenômeno possui um nome famoso:

Lost Update

Todo programador COBOL deveria decorar esse termo.


Bem-vindo ao Mundo da Serialização

A solução encontrada pelos engenheiros da IBM foi extremamente elegante.

Se duas pessoas querem mexer no mesmo objeto...

Apenas uma recebe a chave.

A outra espera.

Nascia o conceito de:

ENQ — Enqueue


O Porteiro Invisível do CICS

Imagine um prédio.

Existe apenas um porteiro.

Toda vez que alguém deseja entrar na sala do cofre ele pergunta:

— Quem está usando?

Se ninguém estiver:

Entrada autorizada.

Caso contrário:

Aguarde sua vez.

Esse porteiro chama-se ENQ.

Ele nunca aparece na tela.

Nunca imprime mensagens.

Mas está trabalhando durante toda a execução do sistema.


O Que Significa ENQ?

ENQueue significa literalmente:

Entrar na fila.

Mas, no universo CICS, seu verdadeiro significado é muito mais elegante.

Ele diz:

"Este recurso agora pertence exclusivamente a mim."

Enquanto isso durar...

Ninguém mais toca nele.


O Cadeado Invisível

Uma das melhores formas de entender ENQ é imaginar um cadeado.

Quando fazemos:

EXEC CICS ENQ
     RESOURCE('CLIENTE0001')
END-EXEC.

É como colocar isto:

🔒

na porta.

Todos os outros programas verão:

OCUPADO

Curiosidade Bellacosa ☕

Pouca gente sabe que ENQ não bloqueia apenas arquivos.

Ele pode proteger praticamente qualquer coisa.

Você pode criar recursos chamados:

PIX
CHEQUE
LOTE
CLIENTE
CARRINHO
IMPRESSORA
NOTA-FISCAL

Ou qualquer nome inventado pela aplicação.

O CICS não se importa.

Para ele aquilo é apenas um identificador lógico.

É quase como colocar etiquetas em gavetas invisíveis.


O Outro Guardião

Todo cadeado precisa de uma chave.

Toda porta precisa ser aberta.

É aí que surge o segundo personagem da história.

DEQ

Dequeue.

Seu trabalho é extremamente simples.

Ele chega.

Olha para o cadeado.

E diz:

Pode liberar.


O Erro Mais Comum dos Iniciantes

O iniciante costuma pensar:

Fiz ENQ.

Já terminei.

Não.

Falta a parte mais importante.

Liberar.

EXEC CICS DEQ
     RESOURCE('CLIENTE0001')
END-EXEC.

Sem isso...

Você deixou a porta trancada.


Imagine um Banheiro Público...

Parece engraçado.

Mas é exatamente isso.

Existe apenas uma chave.

Pessoa A entra.

Fecha.

Sai.

Devolve a chave.

Pessoa B entra.

Agora imagine alguém esquecer a chave no bolso.

Toda a fila para.

No CICS acontece exatamente igual.


O Que Está Sendo Protegido?

Essa é uma pergunta muito interessante.

Muitos imaginam que ENQ trava registros VSAM.

Não necessariamente.

Na verdade, ele protege:

recursos lógicos.

Essa é uma diferença extremamente importante.


READ UPDATE Não é ENQ

Essa confusão aparece em praticamente todas as entrevistas técnicas.

READ UPDATE faz lock do registro.

ENQ faz lock de um recurso definido pela aplicação.

São mecanismos diferentes.

Podem trabalhar juntos.

Aliás...

Nos melhores sistemas eles trabalham juntos.


O Fluxo Correto

Imagine um programa bancário.

Ele faz:

ENQ

↓

READ UPDATE

↓

ALTERA

↓

REWRITE

↓

DEQ

Perceba que existem dois níveis de proteção.

Um lógico.

Outro físico.

Essa dupla praticamente elimina atualizações perdidas.


O Segredo da Performance

Aqui existe uma pegadinha.

Quanto tempo você segura o cadeado?

Se a resposta for:

Cinco minutos.

Parabéns.

Você acabou de destruir a performance do banco inteiro.


Imagine um supermercado.

Existe apenas um caixa.

O cliente resolve conversar sobre futebol durante quinze minutos.

O restante da fila simplesmente não anda.

É exatamente isso que acontece quando um lock fica ativo tempo demais.


Quanto Menor, Melhor

Os grandes sistemas seguem uma regra quase sagrada.

Primeiro fazem:

✔ cálculos

✔ validações

✔ consultas

✔ regras de negócio

Depois...

Somente quando realmente precisam gravar:

ENQ

↓

Atualiza

↓

DEQ

O lock dura poucos milissegundos.

É elegante.

É rápido.

É eficiente.


Contention

Existe uma palavra que aparece frequentemente em reuniões de performance.

Contention.

Ela significa:

Disputa.

Imagine mil pessoas querendo alterar a mesma conta bancária.

Só uma vence.

As outras esperam.

Quanto maior a fila...

Maior o tempo de resposta.

Maior o consumo de CPU.

Maior a insatisfação do usuário.


O Detetive e a Conta 1001

Vamos transformar isso em um pequeno romance noir.

Uma agência bancária percebe diferenças de saldo.

Nenhum hacker.

Nenhum vírus.

Nenhuma invasão.

O detetive Bellacosa chega.

Analisa os logs.

Tudo parece correto.

Até encontrar duas transações iniciadas exatamente às:

14:03:51.982

Ambas alteraram:

Conta 1001.

Sem ENQ.

O crime perfeito.

O dinheiro não foi roubado.

Foi sobrescrito.


Easter Egg ☕

Os engenheiros veteranos costumam brincar dizendo:

"Todo deadlock começou como um lock inocente."

A frase parece engraçada.

Mas resume décadas de experiência.


Deadlock — Quando Dois Programas Viram Reféns Um do Outro

Imagine:

Programa A faz:

ENQ CONTA A

Programa B faz:

ENQ CONTA B

Depois:

Programa A tenta:

ENQ CONTA B

Enquanto isso:

Programa B tenta:

ENQ CONTA A

Resultado?

Os dois ficam esperando para sempre.

Nenhum avança.

Esse fenômeno chama-se:

Deadlock.

É um dos monstros mais famosos da computação corporativa.


Como Evitar?

Uma técnica clássica consiste em sempre adquirir recursos na mesma ordem.

Exemplo:

Primeiro Cliente.

Depois Conta.

Depois Contrato.

Nunca alterar essa sequência.

Parece simples.

Mas salva sistemas inteiros.


Um Paralelo com Star Wars

Imagine que apenas um Jedi pode entrar na Câmara do Holocron por vez.

Enquanto Luke consulta um Holocron, Obi-Wan, Yoda e Ahsoka aguardam.

Ninguém interrompe o processo.

Quando Luke termina, ele devolve a chave.

O próximo entra.

Esse é o princípio do ENQ.

Sem sabres de luz.

Mas com exatamente a mesma disciplina.


Um Paralelo com um Castelo Medieval

Visualize um castelo.

Existe apenas uma ponte levadiça.

Quando ela abaixa para um cavaleiro entrar, ninguém mais atravessa.

Depois que ela sobe novamente, outro cavaleiro recebe autorização.

ENQ funciona como o guarda da ponte.

DEQ é quem gira a manivela para liberá-la.


Curiosidade Histórica

Muito antes de ouvirmos falar em Kubernetes, microsserviços ou computação em nuvem, os engenheiros de mainframe já resolviam problemas de concorrência em ambientes com milhares de usuários simultâneos.

Nos anos 1970, quando bancos processavam milhões de operações em CICS, conceitos como serialização de recursos, controle de concorrência e recuperação transacional já eram realidade. Muitas das ideias presentes hoje em bancos de dados modernos, filas distribuídas e sistemas de mensageria têm raízes nesses mecanismos clássicos.

Em outras palavras, quando alguém diz que o mainframe é "tecnologia antiga", frequentemente está usando tecnologias que herdaram conceitos desenvolvidos décadas antes nos grandes computadores corporativos.


Dicas de Ouro para o Programador COBOL Iniciante

✔ Pense primeiro na regra de negócio e depois no bloqueio.

✔ Nunca mantenha um ENQ ativo enquanto espera entrada do usuário.

✔ Sempre planeje um caminho para liberar o recurso, mesmo em caso de erro.

✔ Conheça a diferença entre ENQ, READ UPDATE e os mecanismos de lock do banco de dados.

✔ Monitore contenção em produção: um sistema lento nem sempre sofre por falta de CPU; às vezes o gargalo é uma fila de transações esperando pelo mesmo recurso.

✔ Documente quais recursos lógicos sua aplicação utiliza. Um bom padrão de nomenclatura evita conflitos e facilita a manutenção.

✔ Lembre-se de que sincronização excessiva também tem custo. O objetivo não é bloquear tudo, mas bloquear apenas o necessário.


O Arquivo Secreto do Bellacosa Mainframe ☕

Existe uma velha lenda entre programadores veteranos.

Dizem que, em algum lugar dos laboratórios da IBM, existe uma placa com a frase:

"Dados podem ser recriados. Confiança do cliente, não."

Talvez ela nunca tenha existido.

Talvez seja apenas uma história passada de geração em geração.

Mas ela resume perfeitamente por que ENQ e DEQ são tão importantes.

Eles não servem apenas para bloquear recursos.

Eles existem para proteger aquilo que realmente importa.

A confiança de que, ao consultar sua conta bancária, emitir um boleto, fazer um PIX ou registrar um pedido, o resultado refletirá exatamente o que aconteceu — nem mais, nem menos.


Epílogo – O Mistério Resolvido

Já era madrugada.

O jovem programador fechou o manual do CICS.

Olhou novamente para o terminal.

Agora entendia que, por trás de cada transação aparentemente simples, havia um intricado jogo de sincronização, disciplina e engenharia.

O veterano terminou o último gole de café.

Apontou para o console iluminado.

Sorriu discretamente.

— Está vendo? O sistema parece silencioso.

Mas, neste exato instante, milhares de ENQs estão sendo adquiridos, milhares de DEQs estão sendo liberados e milhões de pessoas continuam movimentando seu dinheiro sem imaginar que existe um exército de cadeados invisíveis trabalhando para elas.

O jovem fez que sim com a cabeça.

Naquela noite, ele aprendeu que programar em COBOL não era apenas escrever comandos.

Era compreender a delicada coreografia que impede o caos em um mundo onde milhões de transações acontecem ao mesmo tempo.

E, enquanto as luzes do CPD permaneciam acesas e o z/OS seguia processando silenciosamente mais um dia de trabalho, um novo guardião do CICS acabava de nascer.

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