Snapshot Isolation in SQL Server 2005 & Oracle

In SQL Server 2005 è disponibile la Snapshot Isolation. L'effetto è che il numero di lock, i tempi di attesa per un lock e i deadlock si riducono notevolmente: le transazioni che modificano i dati non bloccano le transazioni che leggono i dati e le transazioni che leggono i dati non bloccano quelle che modificano i dati  perché tutte le operazioni avvengono in una "istantanea" (uno snapshot appunto) che viene fatta al db nell'istante temporale in cui la transazione inizia invece di avvenire direttamente sul db.

Questa nuova funzionalità di SQL Server 2005 è famigliare a chi utilizza Oracle che quindi ora potra usarla anche con SQL Server! In Oracle gli snapshot sono presenti già dalla versione 7 del 1992.

Una differenza tra gli snapshot di SQL Server 2005 e quelli di  Oracle è che gli snapshot di SQL Server 2005 usano di default la concorrenza ottimistica e quindi durante la modifica dei dati non vengono emessi lock (ma se i dati sono cambiati la transazione fallisce) mentre Oracle di default emette i lock per le operazioni di modifica.
Uno svantaggio della concorrenza ottimistica degli snapshot è che i tempi di commit si allungano (per il controllo della concorrenza dei dati) e la dimensione degli snapshot aumenta (perchè vengono fotografati anche i dati in modifica), tuttavia è possibile specificare un comportamento diverso (ossia forzare i lock per le operazioni di modifica) usando i consueti hint di lock.

Un particolare degli snapshot che trae in inganno molti utilizzatori di Oracle (e quindi da ora da tenere presente anche per SQL Server 2005) è che diverse operazioni di lettura (SELECT) fatte in momenti diversi possono appartenere a diversi istanti temporali del Db e quini i dati estratti da 2 select dististe possono essere tra loro disallineati.

 

Print | posted @ lunedì 13 giugno 2005 19:04

Comments have been closed on this topic.