Sybase ASE: «el comando de servidor encontró con una situación de interbloqueo»

Cuando se ejecuta un procedimiento almacenado (a partir de una .NETO de la aplicación) que hace un INSERT y UPDATE, yo a veces (pero no muy a menudo, la verdad) y al azar a recibir este mensaje de error:

ERROR [40001] [DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]el comando de servidor (familia id #0, id de proceso #46) encontraron una situación de interbloqueo. Por favor, vuelva a ejecutar el comando.

¿Cómo puedo solucionar este problema?

Gracias.

¿Sabes qué es un interbloqueo es, ¿por qué un interbloqueo puede suceder … y por qué es que pasa con su código? Has probado a buscar en Google como «sybase» y «bloqueo»?
Sí sé lo que es, sí que he buscado en google. La cosa es que el estancamiento ocurre muy rara vez. Como la consulta es simple (una actualización y una inserción), se debe, en el peor, ser retrasado por el servidor si algún otro bloqueo bloqueo, no simplemente a la basura. También, el error no dice lo que el empate fue en (lo de la tabla, fila, etc.) lo que hace difícil resolver el problema. Yo no puedo manualmente prevenir 2 consultas de llegar en el servidor, en el mismo tiempo!
Un interbloqueo nunca retrasos de otros procesos en los que se detiene el otro proceso muertos – me gustaría leer más sobre los interbloqueos como que aun no muestra comprensión
Bien ese es el punto, Mark. Estoy diciendo que /debe/ ser retrasado, como en, que es el comportamiento que se espera. Por supuesto, el problema aquí es que no es el comportamiento que estoy recibiendo, ya que, en lugar de ser retrasado, se está causando un estancamiento y ser completamente bloqueado.

OriginalEl autor Laurent | 2009-07-10

3 Kommentare

  1. 7

    Su mejor apuesta para la solución de que los interbloqueos problema es establecer «imprimir información de interbloqueo» sobre el uso de

    sp_configure «impresión de interbloqueo de la información», 1

    Cada vez que hay un interbloqueo esto imprimirá la información acerca de qué procesos y qué sql que se ejecuta en el tiempo de los muertos de bloqueo.

    Si las tablas están utilizando allpages de bloqueo. Puede reducir los interbloqueos para cambiar a datarows o datapages de bloqueo. Si usted hace esto, asegúrese de recoger nuevas estadísticas sobre las tablas y volver a crear los índices, vistas, procedimientos almacenados y desencadenadores que tener acceso a las tablas que se cambian. Si usted no va a obtener errores o no ver la totalidad de los beneficios del cambio de la función en la que no se vuelve a crear.

    OriginalEl autor Todd Pierce

  2. 2

    Tengo un conjunto de largo plazo de las aplicaciones que ocasionalmente vuelta de la tabla de acceso y sybase va a tirar este error. Si usted compruebe el servidor de sybase registro se le dará la completa información sobre por qué sucedió. Como: El sql que estaba involucrado los dos procesos tratando de obtener un bloqueo. Generalmente uno tratando de leer y el otro haciendo algo así como una eliminación. En mi caso las aplicaciones que se están ejecutando en distintos Jvm, así que no puedo synchronize sólo tiene que limpiar periódicamente.

    OriginalEl autor Jim Jones

  3. 0

    Suponiendo que las tablas están correctamente indexada (y que en realidad están utilizando los índices – siempre vale la pena verificar a través de la consulta del plan) usted podría tratar de romper las piezas de los componentes de la SP abajo y envolviéndolos en transacciones separadas, de modo que cada unidad de trabajo se haya completado antes de la siguiente comienza.

     begin transaction 
       update mytable1 
         set mycolumn = "test"
       where ID=1
    
     commit transaction
     go
    
     begin transaction 
      insert into mytable2 (mycolumn) select mycolumn from mytable1 where ID = 1
     commit transaction
     go
    De hecho, hoy he tenido el mismo problema de nuevo, con un procedimiento almacenado que contiene una única instrucción (INSERT)…

    OriginalEl autor Paul Owens

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea