Ho un problema che la stessa stored procedure viene invocata esattamente nello stesso momento con esattamente gli stessi paramenter.Inserisci problema concorrenza - Ambiente con multithreading
Lo scopo della procedura memorizzata è di recuperare un record se esiste o di creare e recuperare il record se non esiste.
Il problema è che entrambi i thread verificano l'esistenza del record e segnalano false e quindi entrambi stanno inserendo un nuovo record, creando un duplicato nel database.
Ho provato ad attaccare le operazioni all'interno di una transazione, ma questo ha prodotto solo centinaia di deadlock.
Esiste un modo per controllare l'esistenza del record in modo thread-safe in modo che il secondo thread non esegua la lettura finché il primo non ha terminato l'inserimento? Non ho alcun controllo sui thread stessi, solo sui processi memorizzati che stanno eseguendo.
Qualsiasi aiuto sarebbe gradito,
Grazie.
Ha prodotto deadlock, cosa stanno facendo esattamente queste transazioni; non devono essere semplici come affermate. Che tipo di RDBMS stai usando? – BobbyShaftoe
Al contrario, la procedura è molto semplice: controlla se il record esiste già, lo crea se non lo fa e quindi seleziona il record. L'unico motivo per cui abbiamo un problema è che ci sono molti thread concorrenti (fino a 200). – DJCasey
Oh, ho dimenticato di dire - utilizzando SQL Server 2008. – DJCasey