Pregunta

Sigo corriendo en "enq: TX - fila contención de bloqueo", cuando ejecuto el comando SQL a continuación en un oráculo de 9 dB. El mitabla tabla es una tabla pequeña, con menos de 300 líneas.

UPDATE MYTABLE
SET     col1 = col1 + :B3 ,
        col2    = SYSDATE
WHERE   :B2            = col3
    AND :B1        = col4

corro 10 hilos al mismo tiempo, y algo de esperar hasta 10 segundos para obtener una oportunidad de actualizar. Sé que voy a afrontar estas cuestiones de punto muerto, pero el problema para mí es que ellos deben ser capaces de ser mucho más rápido, ya que la mesa es pequeña, por lo actualizando sería rápido.

editar : no puede alterar este código, que está dentro de una aplicación de terceros. Sólo puedo modificar la base de datos.

¿qué puedo hacer para mejorar la velocidad de la cola rowlock?    ¿Cómo puedo mejorar este tiempo de espera para que mis hilos se ejecutan más rápido?

¿Fue útil?

Solución

Si no desea ser bloqueado no trate de actualizar a ciegas . Realizar un SELECT FOR UPDATE NOWAIT primero. Si se eleva una excepción (ORA-00054) esto significa que otra sesión está trabajando actualmente con esa fila. En ese caso, en función de sus necesidades, usted podría tratar de actualizar otra fila (estás tratando de construir un proceso de cola / retirada de cola?), Espera (dbms_lock.sleep) o devolver un mensaje de error a la aplicación que llama.

no frente a un punto muerto si se bloquea la fila con FOR UPDATE NOWAIT primero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top