Le fractionnement des transactions décharge les requêtes de lecture effectuées au sein de transactions non validées automatiquement (non auto-committed) de l'instance principale vers les instances en lecture seule, sans nécessiter de modification du code de l'application. Lorsque toutes les requêtes sont exécutées dans des transactions avec la validation automatique désactivée, l'instance principale traite chaque requête, même si les lectures ne requièrent pas d'accès en écriture. Le fractionnement des transactions achemine ces lectures vers les instances en lecture seule avant le début de toute opération d'écriture, ce qui réduit la charge sur l'instance principale et améliore sa stabilité.
Prérequis
Avant de commencer, assurez-vous que :
La fonctionnalité de proxy de base de données est activée sur votre instance ApsaraDB RDS for PostgreSQL. Consultez la rubrique Activer la fonctionnalité de proxy de base de données
Fonctionnement
Par défaut, le proxy de base de données envoie toutes les requêtes effectuées au sein d'une transaction à l'instance principale afin de préserver la cohérence en lecture/écriture. Cette approche est nécessaire pour les opérations d'écriture, mais les requêtes de lecture précédant toute écriture sont également envoyées à l'instance principale, même lorsque des instances en lecture seule pourraient les traiter en toute sécurité.
Le fractionnement des transactions modifie ce comportement lorsque deux conditions sont remplies :
Le niveau d'isolation des transactions est READ COMMITTED (valeur par défaut de PostgreSQL).
La validation automatique est désactivée (
autocommit = off).
Dans ces conditions, le proxy retarde l'ouverture d'une transaction sur l'instance principale jusqu'à la première opération d'écriture. Toutes les requêtes de lecture émises avant cette écriture sont acheminées vers les instances en lecture seule via l'équilibreur de charge.
Le fractionnement des transactions est activé automatiquement lorsque vous activez le proxy de base de données. Il n'est pas possible de le désactiver.
Limites
Toutes les transactions ne peuvent pas être fractionnées. Assurez-vous que le fractionnement des transactions convient à vos charges de travail avant d'activer le proxy de base de données.
| Contrainte | Détail |
|---|---|
| Transactions explicites | Les transactions démarrées avec BEGIN ou START TRANSACTION ne sont jamais fractionnées. Toutes les requêtes d'une transaction explicite sont envoyées à l'instance principale. |
| Cohérence globale | Le fractionnement des transactions ne peut pas garantir la cohérence globale entre les requêtes. Évaluez cet arbitrage avant d'activer le proxy de base de données. |
| Impossible à désactiver | Une fois le proxy de base de données activé, le fractionnement des transactions reste toujours actif. Il n'existe aucune option permettant de le désactiver indépendamment. |
Quand utiliser le fractionnement des transactions
Le fractionnement des transactions est particulièrement efficace lorsque votre application englobe des requêtes à forte dominance de lecture dans des transactions non validées automatiquement, sans utiliser d'instructions explicites BEGIN ou START TRANSACTION.
| Scénario | Adapté ? |
|---|---|
| Applications avec validation automatique désactivée, principalement des lectures avant les écritures | Oui |
Transactions explicites utilisant BEGIN ou START TRANSACTION |
Non — les lectures restent sur l'instance principale |
| Charges de travail nécessitant une cohérence globale stricte pour toutes les lectures | Non — la cohérence globale ne peut pas être assurée |
Référence API
| Opération | Description |
|---|---|
| DescribeDBProxy | Interroger les détails d'un proxy de base de données |
| DescribeDBProxyEndpoint | Interroger les informations relatives à un endpoint de proxy de base de données |