Locks - insert + update

Dúvidas, dicas e atualizações sobre o Treinamento Oracle Performance Diagnostics & Tuning.
Post Reply
Róli

Locks - insert + update

Post by Róli »

Olá,

A alguns meses já venho analisando um cenário com locks onde foram realizadas várias análises. Neste cenário, ocorre o seguinte:

Durante o horário comercial, onde não há concorrência de transações, um processo ocorre de cada vez, não há incidêcia de locks. Mas no final do dia, quando os processos são executados (fechamento de caixa), é gerado milhares de locks, sem exagerar, 947 sessões em lock.

Waiter Sid Waiter SQL Blocker Event Blocking Sid Blocking SQL
============ ================================== ============================= ================================
777 INSERT INTO tablexxx (xxx, xxx SQL*Net message from client 334 SELECT T1.xxxx
793 INSERT INTO tablexxx (xxx, xxx TX - row lock contention 586 INSERT INTO xxx xxx,xxx,xxx
570 INSERT INTO tablexxx (xxx, xxx enq: TX - row lock contention 586 INSERT INTO xxx xxx,xxx,xxx
365 INSERT INTO tablexxx (xxx, xxx enq: TX - row lock contention 586 INSERT INTO xxx xxx,xxx,xxx
487 INSERT INTO tablexxx (xxx, xxx SQL*Net message from client 334 SELECT T1.xxxx
370 INSERT INTO tablexxx (xxx, xxx SQL*Net message from client 334 SELECT T1.xxxx
840 INSERT INTO tablexxx (xxx, xxx SQL*Net message from client 334 SELECT T1.xxxx

Há update também incluso nessas sessões.

Ocorre o seguinte:
1 atualização A
2 atualizações B
1 tenta atualizar B mas bloqueia.
2 tenta atualizar A , mas a impasse de blocos
** nem um dos dois nunca será concluída.

Tem situações que chegam ao extremo a gerar deadlocks conforme a baixo:

---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TX-00570027-00000ee0 113 807 X 107 729 X
TX-00640002-00000c22 107 729 X 113 807 S
session 807: DID 0001-0071-0000066C session 729: DID 0001-006B-0000038C
session 729: DID 0001-006B-0000038C session 807: DID 0001-0071-0000066C
Rows waited on:
Session 729: obj - rowid = 0004C918 - AABMkYAAxAAA3CEAAN
(dictionary objn - 313624, file - 49, block - 225412, slot - 13)
Session 807: obj - rowid = 00052493 - AABSSTABIAAC64/AAA
(dictionary objn - 337043, file - 72, block - 765503, slot - 0)
Information on the OTHER waiting sessions:
Session 729:
program: w3wp.exe
application name: SESCNET_172.17.30.111, hash value=3507071524
action name: TCprDupMov , hash value=2921407607
Current SQL Statement:
UPDATE tableMae SET campo=:bind1, xxx=:bind2, ...
End of information on OTHER waiting sessions.
Current SQL statement for this session:
INSERT INTO tableFilha (Campo1 Campo2, ...):CxaCaixaDtaAbertura, :CprDupProProjetoSeq, :CprDupDatCanTitulo, :CprDupSacVendaItem, :CprDupCadProgramaCod, :CprDupHoraMovPag, 0, 0, 0, 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, ' ', 0, 0, 0, 0, ' ', 0, ' ', 0, ' ', 0, 0, 0, 0, 0, 0, 0, ' ', 0, 0, 0, 0, 0, ' ', 0, ' ', TO_DATE('0001-01-01', 'YYYY-MM-DD'), 0, 0, 0, 0, 0, TO_DATE('0001-01-01', 'YYYY-MM-DD'), 0, 0, 0, 0, 0, 0, ' ', 0, 0, TO_DATE('0001-01-01', 'YYYY-MM-DD'), 0, 0, 0, 0, 0, 0, ' ', 0, ' ', 0)
===================================================



Pelas notas que investiguei no Metalink, os locks a cima são típicos de espera por bloco livre (com certeza é um problema de design do aplicativo em que as transações estão modificando quadros A e B em ordens opostas, mas ficou para o DBA resolver..)

), sendo uma forma de tratamento, o aumento do INITRANS das tabelas envolvidas. Fiz essa alteração no final de semana, na segunda-feira irei aguardar o resultado.

Gostaria de saber se há mais alguma ação que posso fazer.

portilho
Site Admin
Posts: 502
Joined: Wed May 29, 2013 8:51 am

Re: Locks - insert + update

Post by portilho »

Acho que você está no caminho certo, além do INITRANS, é Design.
Temos mais um item para olhar, verificou se estas tabelas possuem índices BITMAP? Índice BITMAP causa lock mesmo de INSERTs, para o mesmo valor.

Post Reply