Tengo un problema con que se invoque el mismo procedimiento almacenado exactamente al mismo tiempo con exactamente los mismos parámetros.Problema de concurrencia de inserción - Entorno multiproceso
El objetivo del procedimiento almacenado es recuperar un registro si existe o crear y recuperar el registro si no existe.
El problema es que ambos hilos están comprobando la existencia del registro y el informe falso y luego ambos están insertando un nuevo registro, creando un duplicado en la base de datos.
Intenté pegar las operaciones dentro de una transacción pero esto simplemente produjo cientos de puntos muertos.
¿Hay alguna forma de que pueda verificar la existencia del registro de forma segura para que el segundo hilo no lo lea hasta que el primero haya terminado su inserción? No tengo control sobre los hilos, solo sobre los procesos almacenados que están ejecutando.
Cualquier ayuda sería apreciada,
Gracias.
Produjo interbloqueos, ¿qué están haciendo exactamente estas transacciones; no deben ser tan simples como dices. ¿Qué RDBMS estás usando? – BobbyShaftoe
Por el contrario, el procedimiento es muy simple: comprueba si el registro ya existe, lo crea si no y luego selecciona el registro. La única razón por la que tenemos un problema es que hay muchos hilos concurrentes (hasta 200). – DJCasey
Ah, se me olvidó decir, usando SQL Server 2008. – DJCasey