Partager via


Optimisation des niveaux d'isolement des transactions

La propriété d'isolement est l'une des quatre propriétés ACID (atomicité, cohérence, isolement, durabilité) dont une unité logique de travail doit disposer pour être considérée comme une transaction. Il s'agit de la capacité à protéger les transactions des effets de modifications effectuées par des transactions concurrentes. Le niveau d'isolement est personnalisable pour chaque transaction.

Le Moteur de base de données SQL Server prend en charge les niveaux d'isolement des transactions définis dans SQL-92. La définition de niveaux d'isolement des transactions permet aux développeurs de compenser l'augmentation des risques de certains problèmes d'intégrité par un meilleur accès simultané aux données. Les niveaux d'isolement des transactions sont les suivants :

  • READ UNCOMMITTED

  • READ COMMITTED

  • REPEATABLE READ

  • SNAPSHOT

  • SERIALIZABLE

À deux exceptions près, chaque niveau d'isolement offre un meilleur isolement que le niveau précédent en maintenant des verrous plus restrictifs pendant des périodes plus longues. Les exceptions sont SNAPSHOT et READ COMMITTED lorsque la valeur ON est attribuée à READ_COMMITTED_SNAPSHOT. Ces niveaux d'isolement ne détiennent pas de verrous partagés sur les lignes de données durant les opérations de lecture. Seuls les verrous SCH-S sont maintenus au niveau de la table.

Les niveaux d'isolement des transactions peuvent être définis à l'aide de Transact-SQL ou d'une API de base de données.

  • Transact-SQL
    Les scripts Transact-SQL utilisent l'instruction SET TRANSACTION ISOLATION LEVEL.

  • ADO
    Les applications ADO attribuent à la propriété IsolationLevel de l'objet Connection la valeur adXactReadUncommitted, adXactReadCommitted, adXactRepeatableRead ou adXactReadSerializable.

  • ADO.NET
    Les applications ADO.NET qui utilisent l'espace de noms managé System.Data.SqlClient peuvent appeler la méthode SqlConnection.BeginTransaction et attribuer à l'option IsolationLevel la valeur Unspecified, Chaos, ReadUncommitted, ReadCommitted, RepeatableRead, Serializable et Snapshot.

  • OLE DB
    Au début d'une transaction, les applications qui utilisent OLE DB appellent ITransactionLocal::StartTransaction avec la valeur ISOLATIONLEVEL_READUNCOMMITTED, ISOLATIONLEVEL_READCOMMITTED, ISOLATIONLEVEL_REPEATABLEREAD, ISOLATIONLEVEL_SNAPSHOT ou ISOLATIONLEVEL_SERIALIZABLE attribuée au paramètre isoLevel.

    Lorsque vous spécifiez le niveau d'isolement d'une transaction en mode « autocommit », les applications OLE DB peuvent attribuer aux niveaux DBPROP_SESS_AUTOCOMMITISOLEVELS de la propriété DBPROPSET_SESSION la valeur DBPROPVAL_TI_CHAOS, DBPROPVAL_TI_READUNCOMMITTED, DBPROPVAL_TI_BROWSE, DBPROPVAL_TI_CURSORSTABILITY, DBPROPVAL_TI_READCOMMITTED, DBPROPVAL_TI_REPEATABLEREAD, DBPROPVAL_TI_SERIALIZABLE, DBPROPVAL_TI_ISOLATED ou DBPROPVAL_TI_SNAPSHOT.

  • ODBC
    Les applications ODBC appellent SQLSetConnectAttr avec la valeur SQL_ATTR_TXN_ISOLATION pour le paramètre Attribute et la valeur SQL_TXN_READ_UNCOMMITTED, SQL_TXN_READ_COMMITTED, SQL_TXN_REPEATABLE_READ ou SQL_TXN_SERIALIZABLE pour le paramètre ValuePtr.

    Pour les transactions de captures instantanées, les applications appellent SQLSetConnectAttr avec la valeur SQL_COPT_SS_TXN_ISOLATION pour le paramètre Attribute et la valeur SQL_TXN_SS_SNAPSHOT pour le paramètre ValuePtr. Une transaction de capture instantanée peut être extraite à l'aide de SQL_COPT_SS_TXN_ISOLATION ou de SQL_ATTR_TXN_ISOLATION.