mysqlnd_ms_xa_begin
(PECL mysqlnd_ms < 1.6.0)
mysqlnd_ms_xa_begin — Démarre une transaction distribuée/XA sur les serveurs MySQL particpants
Description
Démarre une transaction distribuée/XA sur les serveurs MySQL particpants. PECL/mysqlnd_ms agit comme un coordinateur de la transaction distribuée.
Une fois qu'une transaction globale a commencé, le plugin injecte les requêtes SQL XA BEGIN appropriées sur tous les serveurs MySQL particpants. La transaction globale est soit terminée par un appel à la fonction mysqlnd_ms_xa_commit(), ou la fonction mysqlnd_ms_xa_rollback() soit, par une annulation implicite lorsqu'une erreur survient.
Pendant une transaction globale, le plugin surveille tous les changements de serveurs, par exemple, lorsque l'on passe d'un serveur MySQL partagé à un autre. Si une requête est émise vers un serveur qui ne participe pas à la transaction globale, une requête XA BEGIN y sera exécutée avant la requête demandée. D'un point de vue utilisateur, l'injection intervient pendant un appel à une fonction d'exécution de requête, comme mysqli_query(). Si l'injection échoue, l'erreur sera rapportée à l'appelant, soit la fonction d'exécution de la requête. Le serveur défaillant ne devient pas un participant de la transaction globale. L'utilisateur doit re-tenter la requête sur le serveur, et ainsi, re-tenter l'injection XA BEGIN, soit stopper la transaction globale car tous les serveurs voulus ne peuvent participer, soit ignorer et continuer l'action globale sans le serveur défaillant.
Il existe plusieurs raisons dans l'échec d'une injection XA BEGIN comme un serveur qui ne peut être atteint, ou un serveur qui a une transaction XA concurrente qui utilise le même xid.
Notez que les transactions globales et locales sont mutuellement exclusives. Vous ne pouvez pas démarrer une transaction XA lorsque vous avez une transaction locale en cours. La transaction locale doit d'abord être fermée. Le plugin tente de détecter ce conflit aussi vite que possible. Il va surveiller les appels APIs de contrôler des transactions locales afin d'en vérifier le statut. Cependant, si des requêtes SQL sont utilisées pour les transactions locales, comme BEGIN, le plugin peut ne pas connaître le statut courant et le conflit n'est pas détecté avant que l'injection XA BEGIN ne soit effectuée.
L'utilisation de ressources XA différents des serveurs MySQL n'est pas supportée par cette fonction. Pour mener à bien une transaction globale entre, par exemple, un serveur MySQL et un autre système de base de données, vous devez réaliser vous même les commandates systèmes SQL.
Note: Expérimental
Cette fonctionalité est actuellement en cours de développement. Il peut y avoir des bogues ou des limitations dans la fonctionalité. Ne pas utiliser en environnement de production.
Liste de paramètres
-
connection
-
Un gestion de connexion MySQL obtenu depuis une des fonctions de connexion des extensions mysqli, mysql ou PDO_MYSQL.
-
gtrid
-
Identifiant de transaction globale (gtrid). Le gtrid est une chaîne binaire d'une longueur maximale de 64 octets. Notez que suivant le jeu de caractères que vous utilisez, 64 caractères peuvent nécessiter plus de 64 octets à stocker.
Suivant la syntaxe MySQL SQL, les transactions XA utilisent des identifiants comportant 3 parties. Un xid est composé d'un identifiant de transaction globale (gtrid), un qualifieur de branche (bqual), et un identifiant de format (formatID). Seul l'identifiant de transaction globale peut et doit être défini.
Le qualifieur de branche et l'identifiant de format sont définis automatiquement. Le détail dépend de l'implémentation choisie, et peut changer sans aucun avertissement. En version 1.6, le qualifieur de branche est un nombre consécutif, qui est incrémenté lorsqu'un participant rejoint la transaction globale.
-
timeout
-
Délai maximal d'attente, en secondes. La valeur par défaut est de 60 secondes.
Ce délai maximal d'attente est le point final du début du collecteur de données incorrectes. Si une transaction prend plus de temps que prévu, le collecteur de données incorrectes commence à vérifier le statut des transactions.
Le fait de définir une valeur trop basse rend les vérifications du collecteur de données incorrectes trop fréquentes. Notez que la vérification des statuts d'une transaction globale signifie une connexion vers tous les participants enregistrés, et éventuellement, leur envoyer des requêtes.
Valeurs de retour
Retourne TRUE
s'il n'y a aucune transaction globale ou locale, et une nouvelle
transaction globale peut être démarrée. Sinon, retourne FALSE
.
Voir aussi
- Démarrage rapide avec les transactions distribuées/XA
- La configuration à l'exécution
- mysqlnd_ms_get_stats() - Retourne des statistiques quant à la distribution et la connexion de requêtes
Version en cache
24/12/2024 04:04:32 Cette version de la page est en cache (à la date du 24/12/2024 04:04:32) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mysqlnd-ms-xa-begin.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.