Controllo della concorrenza

La concorrenza è la capacità di due transazioni di usare contemporaneamente gli stessi dati; con un maggiore isolamento delle transazioni, in genere si riduce la concorrenza. Questo avviene perché l'isolamento delle transazioni viene in genere implementato bloccando le righe e, man mano che vengono bloccate più righe, è possibile completare meno transazioni senza essere bloccati almeno temporaneamente da una riga bloccata. Sebbene la concorrenza ridotta venga generalmente accettata come un compromesso per i livelli di isolamento delle transazioni più elevati necessari per mantenere l'integrità del database, può diventare un problema nelle applicazioni interattive con attività di lettura/scrittura elevate che usano cursori.

Si supponga, ad esempio, che un'applicazione esegua l'istruzione SQL SELECT * FROM Orders. Chiama SQLFetchScroll per scorrere il set di risultati e consente all'utente di aggiornare, eliminare o inserire ordini. Dopo che l'utente aggiorna, elimina o inserisce un ordine, l'applicazione esegue il commit della transazione.

Se il livello di isolamento è Lettura ripetibile, la transazione potrebbe, a seconda della modalità di implementazione, bloccare ogni riga restituita da SQLFetchScroll. Se il livello di isolamento è Serializzabile, la transazione potrebbe bloccare l'intera tabella Orders. In entrambi i casi, la transazione rilascia i blocchi solo quando viene eseguito il commit o il rollback. Pertanto, se l'utente impiega molto tempo a leggere gli ordini e molto poco tempo ad aggiornarli, eliminarli o inserirli, la transazione potrebbe bloccare facilmente un numero elevato di righe, rendendole non disponibili ad altri utenti.

È un problema anche se il cursore è di sola lettura e l'applicazione consente all'utente di leggere solo gli ordini esistenti. In questo caso, l'applicazione esegue il commit della transazione e rilascia i blocchi, quando chiama SQLCloseCursor (in modalità commit automatico) o SQLEndTran (in modalità commit manuale).

Questa sezione descrive gli argomenti seguenti: