Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Niveaux d'isolation des transactions dans Babelfish
Babelfish prend en charge les niveaux d'isolation des transactionsREAD UNCOMMITTED
, etREAD COMMITTED
. SNAPSHOT
À partir de la version 3.4 de Babelfish, des niveaux d'isolation supplémentaires SERIALIZABLE
sont pris en REPEATABLE READ
charge. Tous les niveaux d'isolation de Babelfish sont pris en charge par le comportement des niveaux d'isolation correspondants dans Postgre. SQL SQL Server et Babelfish utilisent différents mécanismes sous-jacents pour implémenter des niveaux d'isolation des transactions (blocage des accès simultanés, verrous liés aux transactions, gestion des erreurs, etc.). De plus, il existe des différences subtiles dans la manière dont l'accès simultané peut fonctionner pour différentes charges de travail. Pour plus d'informations sur ce SQL comportement de Postgre, consultez Transaction Isolation
Rubriques
Vue d'ensemble des niveaux d'isolation des transactions
Les niveaux d'isolation des transactions SQL du serveur d'origine sont basés sur un verrouillage pessimiste où une seule copie des données existe et où les requêtes doivent verrouiller des ressources telles que des lignes avant d'y accéder. Plus tard, une variation du niveau READ COMMITTED
d'isolation a été introduite. Cela permet d'utiliser des versions en ligne pour améliorer la simultanéité entre les lecteurs et les rédacteurs en utilisant un accès non bloquant. De plus, un nouveau niveau d'isolation appelé SNAPSHOT
est disponible. Il utilise également des versions en ligne pour offrir une meilleure simultanéité qu'un niveau d'REPEATABLE READ
isolation en évitant le verrouillage partagé des données de lecture conservées jusqu'à la fin de la transaction.
Contrairement à SQL Server, tous les niveaux d'isolation des transactions de Babelfish sont basés sur un verrouillage () MVCC optimiste. Chaque transaction affiche un instantané des données soit au début de l'instruction (READ COMMITTED
), soit au début de la transaction (REPEATABLE READ
,SERIALIZABLE
), quel que soit l'état actuel des données sous-jacentes. Par conséquent, le comportement d'exécution des transactions simultanées dans Babelfish peut différer de celui du SQL serveur.
Par exemple, considérez une transaction avec un niveau d'isolation initialement bloquée dans le SQL serveur mais SERIALIZABLE
qui aboutit ultérieurement. Il peut échouer dans Babelfish en raison d'un conflit de sérialisation avec une transaction simultanée qui lit ou met à jour les mêmes lignes. Il peut également arriver que l'exécution de plusieurs transactions simultanées donne un résultat final différent dans Babelfish par rapport à SQL Server. Les applications qui utilisent des niveaux d'isolation doivent être testées de manière approfondie pour détecter les scénarios de simultanéité.
Niveaux d'isolation dans le SQL serveur | Niveau d'isolement de Babelfish | Niveau d'SQLisolation Postgre | Commentaires |
---|---|---|---|
|
|
|
|
|
|
|
SQL |
|
|
|
Les deux sont basés sur un instantané (MVCC) mais ils ne sont pas exactement identiques. |
|
|
|
Exactement pareil. |
|
|
|
SQL |
|
|
|
SQL |
Note
Les indices de tableau ne sont actuellement pas pris en charge et leur comportement est contrôlé à l'aide de la trappe d'échappement prédéfinie de Babelfish. escape_hatch_table_hints
Configuration des niveaux d'isolation des transactions
Utilisez la commande suivante pour définir le niveau d'isolation des transactions :
SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE }
Activation ou désactivation des niveaux d'isolation des transactions
Les niveaux d'isolation des REPEATABLE READ
transactions SERIALIZABLE
sont désactivés par défaut dans Babelfish et vous devez les activer explicitement en réglant l'utilisation de la trappe babelfishpg_tsql.isolation_level_serializable
ou de la trappe d'babelfishpg_tsql.isolation_level_repeatable_read
échappement. pg_isolation
sp_babelfish_configure
Pour de plus amples informations, veuillez consulter Gestion du traitement des erreurs Babelfish avec des trappes de secours.
Vous trouverez ci-dessous des exemples d'activation ou de désactivation de l'utilisation de REPEATABLE READ
et SERIALIZABLE
dans la session en cours en définissant leurs trappes d'évacuation respectives. Incluez éventuellement un server
paramètre pour définir la trappe d'échappement pour la session en cours ainsi que pour toutes les nouvelles sessions suivantes.
Pour activer l'utilisation de uniquement SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
dans la session en cours.
EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'pg_isolation'
Pour permettre l'utilisation de la session SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
en cours et de toutes les nouvelles sessions ultérieures.
EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'pg_isolation', 'server'
Pour désactiver l'utilisation de SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
dans la session en cours et dans les nouvelles sessions ultérieures.
EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'off', 'server'
Pour activer l'utilisation de uniquement SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
dans la session en cours.
EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'pg_isolation'
Pour permettre l'utilisation de la session SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
en cours et de toutes les nouvelles sessions ultérieures.
EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'pg_isolation', 'server'
Pour désactiver l'utilisation de SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
dans la session en cours et dans les nouvelles sessions ultérieures.
EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'off', 'server'