› Fóruns › Banco de dados Oracle › Melhorar Performance › Melhorar Performance
Você está bloqueando a tabela toda,
e em seguida bloqueando as linhas da sua cláusula
,antes do update. Pra mim não faz sentido esse lock table ai.
Pode rancar. Se vc ja seleciona o nrosorte e mantem bloqueado pra vc o numero da sorte no select e depois realiza o update,
essa linha se mantêm bloqueada até você confirmar a transação.
sendo assim nenhuma outra loja irá selecionar a mesma linha irá ficar em waiting for row lock até você confirmar, sendo assim sem o lokc table itá diminuir bastante esses waits por row lock, pois outras loja não precisaram esperar outras processarem ,poderam poderar outros numeros paralelamente e sem se repitir.
LOCK TABLE CYBELAR_NROSORTE IN EXCLUSIVE MODE;
SELECT NRO.NROSORTE
INTO retorno_nrsorte
FROM CYBELAR_NROSORTE NRO
WHERE LOJA IS NULL
AND FLGUSO = 0
AND TO_CHAR(MES_ANO, 'YYYYMM') = TO_CHAR(ADD_MONTHS(SYSDATE, 1), 'YYYYMM')
AND ROWNUM <= 1
FOR UPDATE NOWAIT;