Lorsque la validation automatique est désactivée (par exemple, via SET autocommit=0), le proxy de base de données achemine toutes les requêtes, y compris les lectures, vers l'instance principale, ce qui concentre la charge sur celle-ci. Le fractionnement des transactions décharge automatiquement les requêtes de lecture effectuées avant la première écriture d'une transaction vers les instances en lecture seule, sans nécessiter de modifications du code de l'application ou de la configuration.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Activé la fonctionnalité de proxy de base de données sur votre instance ApsaraDB RDS for MySQL. Pour plus de détails, consultez la rubrique Activer la fonctionnalité de proxy dédié
Fonctionnement
Par défaut, le proxy de base de données envoie toutes les requêtes d'une transaction à l'instance principale afin de préserver l'exactitude des données. Lorsque la validation automatique est désactivée, chaque requête s'exécute au sein d'une transaction implicite, ce qui concentre toute la charge sur l'instance principale.

Le fractionnement des transactions modifie ce comportement : le proxy démarre une transaction sur l'instance principale uniquement lorsqu'une opération d'écriture se produit. Toutes les requêtes de lecture précédant la première écriture sont acheminées vers les instances en lecture seule via un équilibreur de charge. Si le niveau d'isolation par défaut READ COMMITTED est utilisé et que le mode de validation automatique des transactions est désactivé, le système ne démarre une transaction que pour les opérations d'écriture.
La prise en charge des transactions explicites (démarrées avec BEGIN TRANSACTION ou START TRANSACTION) dépend de la date de création de votre instance :
Créée le 31 juillet 2024 ou après : les transactions explicites et implicites peuvent être fractionnées.
Créée avant le 31 juillet 2024 : seules les transactions implicites peuvent être fractionnées.
Règles de routage
Acheminé vers les instances en lecture seule :
Instructions SELECT exécutées avant la première écriture dans une transaction
Acheminé vers l'instance principale :
La première requête d'écriture dans une transaction (c'est à ce moment que la transaction démarre sur l'instance principale)
Toutes les requêtes suivantes dans une transaction d'écriture ouverte (SELECT, UPDATE, INSERT, DELETE, COMMIT)
Le tableau suivant illustre la séquence de routage pour une transaction typique avec la validation automatique désactivée et une transaction démarrée implicitement :
| Instruction SQL | Acheminé vers | Remarques |
|---|---|---|
| SELECT | Instance RDS en lecture seule | Requête de lecture avant la première écriture |
| SELECT | Instance RDS en lecture seule | Requête de lecture avant la première écriture |
| UPDATE, INSERT ou DELETE | Instance RDS principale | Première écriture — la transaction démarre ici |
| SELECT | Instance RDS principale | Requête de lecture après la première écriture |
| UPDATE, INSERT ou DELETE | Instance RDS principale | Requête d'écriture |
| SELECT | Instance RDS principale | Requête de lecture après la première écriture |
| COMMIT | Instance RDS principale | Validation de la transaction |
Activer ou désactiver le fractionnement des transactions
Le fractionnement des transactions ne garantit pas la cohérence globale. Vérifiez que votre charge de travail peut tolérer ce compromis avant d'activer la fonctionnalité.
Accédez à la page Instances. Dans la barre de navigation supérieure, sélectionnez la région où réside votre instance RDS, puis cliquez sur l'ID de l'instance.
Dans le volet de navigation de gauche, cliquez sur Database Proxy.
Dans la section Connection Information, repérez le point de terminaison du proxy à modifier et cliquez sur Modify Configuration dans la colonne Actions.
Dans la boîte de dialogue, cliquez sur Enable ou Disable à côté de Transaction Splitting.
Le nouveau paramètre s'applique uniquement aux nouvelles connexions.
Référence API
| Opération | Description |
|---|---|
| DescribeDBProxy | Interroge les détails du proxy de base de données |
| DescribeDBProxyEndpoint | Interroge les informations sur le point de terminaison du proxy de base de données |
| ModifyDBProxyEndpoint | Modifie les paramètres du point de terminaison du proxy de base de données |