Niveaux d'isolation des transactions dans Babelfish - Amazon Aurora

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.

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 READisolation 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

READ UNCOMMITTED

READ UNCOMMITTED

READ UNCOMMITTED

READ UNCOMMITTEDest le même que READ COMMITTED dans Babelfish ou Postgre SQL

READ COMMITTED

READ COMMITTED

READ COMMITTED

SQLREAD COMMITTEDLe serveur est basé sur le verrouillage pessimiste, Babelfish READ COMMITTED est basé sur le snapshot ()MVCC.

READ COMMITTED SNAPSHOT

READ COMMITTED

READ COMMITTED

Les deux sont basés sur un instantané (MVCC) mais ils ne sont pas exactement identiques.

SNAPSHOT

SNAPSHOT

REPEATABLE READ

Exactement pareil.

REPEATABLE READ

REPEATABLE READ

REPEATABLE READ

SQLREPEATABLE READLe serveur est basé sur le verrouillage pessimiste, Babelfish REPEATABLE READ est basé sur le snapshot ()MVCC.

SERIALIZABLE

SERIALIZABLE

SERIALIZABLE

SQLSERIALIZABLELe serveur est un isolement pessimiste, Babelfish SERIALIZABLE est basé sur un snapshot ()MVCC.

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'