Dans le cadre de la réplication primaire-secondaire, le mécanisme par défaut COMMIT_ORDER détermine la relecture parallèle en fonction de la possibilité d'exécuter des validations (commit) parallèles sur l'instance RDS principale. Cette approche limite le parallélisme de relecture à la concurrence de l'instance principale. WRITESET supprime cette limitation en détectant les conflits de transactions au niveau des lignes, ce qui réduit le délai de réplication entre les instances RDS principales et secondaires.
Fonctionnement de WRITESET
Lorsque COMMIT_ORDER est utilisé, deux transactions ne peuvent être relues en parallèle que si elles peuvent être validées simultanément sur l'instance RDS principale.
WRITESET vérifie si les lignes de données modifiées par chaque transaction entrent en conflit avec celles modifiées par d'autres transactions. En l'absence de conflits, les transactions sont relues en parallèle sur l'instance RDS secondaire, indépendamment de leur mode de validation sur l'instance RDS principale.
Versions prises en charge
L'instance RDS doit exécuter l'une des versions MySQL suivantes :
|
Version MySQL |
Version mineure minimale du moteur |
|
MySQL 5.7 |
20211231 |
|
MySQL 8.0 |
20210930 |
Activez WRITESET
Définissez les trois paramètres suivants. Pour obtenir des instructions, consultez la rubrique Modifier les paramètres de l'instance.
transaction_write_set_extraction = XXHASH64
binlog_transaction_dependency_tracking = WRITESET
binlog_transaction_dependency_history_size = 500000
Le paramètre binlog_transaction_dependency_history_size définit le nombre maximal de lignes de données stockées en mémoire pour la détection des conflits. Une valeur plus élevée permet de suivre davantage de lignes de données et améliore le parallélisme.
Dépendances des paramètres
Les paramètres binlog_transaction_dependency_tracking et transaction_write_set_extraction s'influencent mutuellement. Utilisez uniquement les combinaisons valides répertoriées ci-dessous. Les combinaisons invalides sont bloquées.
|
binlog_transaction_dependency_tracking |
transaction_write_set_extraction |
|
|
|
|
|
|
Référence des paramètres
binlog_transaction_dependency_tracking
Détermine la manière dont les transactions enregistrées dans les journaux binaires sont relues en parallèle sur l'instance RDS secondaire.
La relecture parallèle multithread nécessite que les paramètres replica_parallel_workers ou slave_parallel_workers soient supérieurs à 0.
|
Attribut |
Valeur |
|
Par défaut |
|
|
Valeurs valides |
|
|
Versions prises en charge |
MySQL 5.7 (version mineure du moteur 20211231 et ultérieure), MySQL 8.0 (version mineure du moteur 20210930 et ultérieure) |
|
Valeur |
Description |
|
|
Détermine les dépendances en fonction de l'ordre de validation. Deux transactions peuvent être relues en parallèle sur l'instance RDS secondaire si elles peuvent être validées simultanément sur l'instance RDS principale. Ce mode est influencé par les paramètres de parallélisme de l'instance RDS principale. |
|
|
Détermine les dépendances au niveau des lignes. Deux transactions sont relues en parallèle si elles ne modifient pas la même ligne de données d'une table disposant d'une clé primaire ou unique. Ce mode n'est pas affecté par les paramètres de parallélisme de l'instance RDS principale. |
|
|
Les transactions au sein d'une même session sont relues de manière séquentielle. Les transactions provenant de sessions différentes suivent les mêmes règles que |
transaction_write_set_extraction
Spécifie l'algorithme de hachage utilisé pour calculer la valeur de hachage d'une ligne de données. La valeur de hachage permet de déterminer si différentes transactions modifient la même ligne de données.
|
Attribut |
Valeur |
|
Par défaut |
|
|
Valeurs valides |
|
|
Versions prises en charge |
MySQL 5.7 (version mineure du moteur 20211231 et ultérieure), MySQL 8.0 (version mineure du moteur 20210930 et ultérieure) |
|
Valeur |
Description |
|
|
Ne calcule pas la valeur de hachage des lignes de données. Le paramètre |
|
|
Calcule la valeur de hachage des lignes de données à l'aide d'un algorithme de hachage 64 bits. |
binlog_transaction_dependency_history_size
Spécifie le nombre maximal de lignes de données stockées en mémoire pour la détection des conflits.
|
Attribut |
Valeur |
|
Valeur recommandée |
|
|
Effet |
Une valeur plus élevée permet de suivre davantage de lignes de données et autorise un parallélisme accru. |
Cas d'invalidité de WRITESET
Dans certains scénarios, WRITESET revient au mode COMMIT_ORDER pour la détection des conflits de transactions. Ce basculement ne dégrade pas les performances de relecture parallèle sur l'instance RDS secondaire.
WRITESET devient invalide dans les situations suivantes :
Exécution d'opérations DDL
Validation de transactions volumineuses
Modification de tables comportant des clés étrangères
Présence de tables sans clé primaire
Si vous constatez un délai de réplication entre vos instances RDS secondaires et en lecture seule, activez WRITESET pour le réduire.
Références
Utilisez la fonctionnalité de diagnostic des paramètres pour obtenir des recommandations d'optimisation des paramètres. Consultez la rubrique Utiliser la fonctionnalité de diagnostic des paramètres.
-
Documentation officielle MySQL :