Pregunta

No soy un gran programador de VB, pero tengo la tarea de mantener / mejorar una aplicación de escritorio VB6 que utiliza Sybase ASE como back-end. Esta aplicación tiene alrededor de 500 usuarios.

Recientemente, agregué funcionalidad a esta aplicación que realiza una inserción / actualización adicional en una sola fila de la base de datos, siendo el campo clave el número de transacción y el campo está indexado. La tabla que se actualiza generalmente tiene alrededor de 6000 registros, ya que los registros se eliminan cuando se completan las transacciones. Después de la implementación, la aplicación funcionó bien durante un día y medio antes de que los usuarios informaran un rendimiento lento.

Finalmente, rastreamos el problema de rendimiento hasta un bloqueo de tabla en la base de datos y tuvimos que retroceder a la versión anterior de la aplicación. El primer día de uso fue el lunes, que generalmente es un día muy pesado para el uso del sistema, por lo que estoy confundido por qué el problema no apareció ese día.

En el código que estaba en su lugar, hay una llamada para iniciar una transacción de Sybase. Dentro del bloque entre BeginTrans y CommitTrans, hay una llamada a un archivo DLL que actualiza la base de datos. Coloqué mi nuevo código en un módulo de clase en la DLL.

Estoy confundido acerca de por qué una sola inserción / actualización en una sola fila causaría tal problema, especialmente porque el sistema había estado funcionando bien antes del cambio. ¿Es posible que haya expuesto un problema mayor aquí? ¿O que solo necesito reconsiderar mi enfoque?

Gracias por adelantado a cualquiera que haya estado en una situación similar y pueda ofrecer consejos.

¿Fue útil?

Solución

Resulta que el culpable era un cuadro de mensaje que aparece dentro del alcance de las llamadas BeginTrans y CommitTrans. El usuario con el cuadro de mensaje mantendría un bloqueo de bloqueo en la base de datos hasta que reconociera el mensaje. La solución fue mover el cuadro de mensaje fuera del alcance mencionado anteriormente.

Otros consejos

No puedo entender la imagen completa sin el código SQL que está utilizando.

Además, si se trata de una sola inserción O actualización, ¿por qué está utilizando una transacción? ¿Es posible que muchos usuarios intenten actualizar la misma fila?

Sería útil si publicara tanto el código VB como su SQL (con el plan de consulta si es posible). Sin embargo con la información que tenemos; Ejecutaría update statistics table_name en la tabla para asegurarme de que el plan de consulta esté actualizado.

Si está seguro de que su código debe ejecutarse dentro de una transacción, ¿ha intentado agregar su propio bloque de transacciones que contenga su SQL en lugar de utilizar el que ya está allí?

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