Pular para o conteúdo

Fóruns Banco de dados Oracle Melhorar Performance Melhorar Performance

#94135
vieri
Participante

    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;