Tarde, me he enfrentado a muchas disputas de bloqueo de fila. La tabla en disputa parece ser una tabla particular.
Esto es generalmente lo que sucede:
- El desarrollador 1 inicia una transacción desde la pantalla frontal de Oracle Forms
- El desarrollador 2 inicia otra transacción, desde una sesión diferente usando la misma pantalla
~ 5 minutos, el extremo frontal parece no responder. La comprobación de sesiones muestra la contención de bloqueo de fila. La "solución" que todos arrojan es matar sesiones: /
Como desarrollador de bases de datos
- ¿Qué se puede hacer para eliminar las contiendas de bloqueo de fila?
- ¿Sería posible averiguar qué línea de un procedimiento almacenado está causando estas contenciones de bloqueo de fila?
- ¿Cuál sería la directriz general para reducir / evitar / eliminar tales problemas que codifican?
Si esta pregunta tiene demasiada información abierta / insuficiente, no dude en editar / hágamelo saber. Haré todo lo posible para agregar información adicional.
La tabla en cuestión está bajo muchas inserciones y actualizaciones, diría que es una de las tablas más ocupadas. El SP es bastante complejo, para simplificar, obtiene datos de varias tablas, lo completa en tablas de trabajo, se producen muchas operaciones aritméticas en la tabla de trabajo y el resultado de la tabla de trabajo se inserta / actualiza en la tabla en cuestión.
La versión de la base de datos es Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit. El flujo de la lógica se ejecuta en el mismo orden en ambas sesiones, la transacción no se mantiene abierta durante demasiado tiempo (o al menos eso creo ), y los bloqueos se producen durante la ejecución activa de las transacciones.
Actualización: el recuento de filas de la tabla es mayor de lo que esperaba, aproximadamente 3.1 millones de filas. Además, después de rastrear una sesión, descubrí que un par de declaraciones de actualización de esta tabla no están utilizando el índice. ¿Por qué es así? No estoy seguro. La columna a la que se hace referencia en la cláusula where está indexada. Actualmente estoy reconstruyendo el índice.
COMMIT
o ROLLBACK
en un tiempo razonable ob) organizar de manera que las mismas personas no siempre quieran la misma fila al mismo tiempo.