enq: TX - row lock contention
Descrição do evento
O evento enq: TX - row lock contention ocorre quando uma transação tenta acessar uma linha que já está bloqueada por outra transação. Esse bloqueio geralmente acontece durante operações de DML (Data Manipulation Language), como INSERT, UPDATE ou DELETE, e é comum em ambientes com alta concorrência de acesso a tabelas ou registros.
Impacto no banco de dados
Diminuição de Performance: Transações aguardando por bloqueios podem causar lentidão em aplicações e degradação do desempenho geral do banco de dados.
Redução da Taxa de Transações: Sistemas com alta concorrência podem sofrer uma redução significativa no throughput.
Possível Deadlock: Em casos extremos, pode ocorrer um deadlock, onde duas ou mais transações bloqueiam umas às outras, exigindo intervenção.
Causas comuns
Concorrência em Linhas: Múltiplas transações tentam modificar a mesma linha ou conjunto de linhas simultaneamente.
Falta de índices adequados: Consultas que escaneiam toda a tabela ao invés de localizar linhas específicas podem aumentar a chance de bloqueios.
Transações longas: Transações que mantêm os bloqueios por muito tempo devido a lógica de aplicação ou operações extensas.
Falha em commit/rollback: Aplicações que não fazem COMMIT ou ROLLBACK rapidamente após concluir uma operação de DML.
Como reduzir ou resolver o evento
Adicionar índices adequados: Verifique as consultas para garantir que índices estão sendo utilizados corretamente. Adicione índices apropriados para reduzir o escaneamento de tabelas e acessar apenas os registros necessários.
Reduzir o tamanho das transações: Divida operações em transações menores para evitar manter linhas bloqueadas por longos períodos. Faça COMMIT ou ROLLBACK frequentemente em transações longas.
Redistribuir dados: Particione tabelas muito acessadas para reduzir a concorrência. Use tabelas temporárias para processar dados intermediários e evitar bloqueios em tabelas principais.
Evitar concorrência excessiva: Ajuste a lógica de aplicação para distribuir o acesso a diferentes linhas ou tabelas. Planeje a execução de operações intensivas fora de horários de pico.
Monitorar sessões e bloqueios: Identifique sessões que estão mantendo bloqueios por longos períodos e resolva os problemas relacionados.
V$SESSION: Identifique as sessões bloqueadas e os bloqueadores.
V$LOCK: Consulte informações detalhadas sobre os bloqueios no banco de dados.
AWR Reports e ADDM: Análise histórica e recomendações para melhorar a contenção de bloqueios.
UTLLOCKT.SQL: Script para visualizar bloqueios em uma estrutura hierárquica. .