mysqlnd_ms_get_stats

(PECL mysqlnd_ms >= 1.0.0)

mysqlnd_ms_get_statsRetourne des statistiques quant à la distribution et la connexion de requêtes

Description

mysqlnd_ms_get_stats ( void ) : array

Retourne un tableau de statistiques collectées par le plugin de réplication et d'équilibrage de charge.

La directive de configuration PHP mysqlnd_ms.collect_statistics contrôle la collection des statistiques. Elle est désactivée par défaut pour des raisons de performance.

Le scope des statistiques est le processus PHP. Suivant votre modèle de déploiement, un processus PHP peut gérer une ou plusieurs demandes.

Les statistiques sont agrégées pour toutes les connexions et tous les gestionnaires de stockage. Il n'est pas possible de demander le nombre de requêtes émanant d'appels API mysqli, PDO_MySQL ou mysql utilisées pour les valeurs agrégées.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne NULL si la directive de configuration PHP mysqlnd_ms.enable a désactivé le plugin. Sinon, la fonction retourne un tableau de statistiques.

Tableau de statistiques

Statistique Description Version
use_slave

La sémantique de cette statistique a changé entre les versions 1.0.1 et 1.1.0.

La signification pour la version 1.0.1 est la suivante. Nombre de requêtes considérées comme en lecture seule par l'analyseur de requête interne. Ni les requêtes commençant par une astuce SQL pour forcer l'utilisation d'un esclave, ni les requêtes dirigées vers un esclave par une fonction de rappel définie par les utilisateurs ne sont inclus dans ce chiffre. Le nombre total de requêtes envoyées aux esclaves correspond à use_slave + use_slave_sql_hint + use_slave_callback.

PECL/mysqlnd_ms 1.1.0 introduit un nouveau concept de filtres chaînés. Le statistique est maintenant définie par le filtre interne de balance de charge. Avec la version 1.1.0, le filtre de balance de charge est toujours le dernier dans un filtre chaîné, si utilisé. Dans les versions futures, un filtre de balance de charge pourra être suivi d'autres filtres, faisant ainsi une nouvelle fois évoluée la signification de cette statistique. Si, dans le futur, un filtre de balance de charge est suivi par un autre filtre, il ne sera plus garanti que la requête, qui incrémente use_slave, sera belle et bien exécutée sur un esclave.

La signification pour la version 1.1.0 est la suivante. Nombre de requêtes envoyées aux esclabes. Les requêtes dirigées vers un esclave par un filtre utilisateur (une fonction de rappel définie par l'utilisateur) ne sont pas incluses. Elles le seront par la statistique use_slave_callback.

Depuis la version 1.0.0.
use_master

La sémantique de cette statistique a changée entre les versions 1.0.1 et 1.1.0.

La signification pour la version 1.0.1 est la suivante. Nombre de requêtes considérées comme n'étant pas en lecture seule par l'analyseur interne de requêtes. Ni les requêtes commençant par une astuce SQL pour forcer l'utilisation d'un maître, ni les requêtes redirigées vers un maître par une fonction de rappel définie par l'utilisateur ne sont incluses dans cette statistique. Le nombre total de requêtes envoyées vers le maître correspond à use_master + use_master_sql_hint + use_master_callback.

PECL/mysqlnd_ms 1.1.0 introduit un nouveau concept de filtres chaînés. La statistique est maintenant défini par le filtre de balance de charge interne. Avec la version 1.1.0, le filtre de balance de charge est toujours le dernier filtre d'un filtre chaîné, si utilisé. Dans les versions futures, un filtre de balance de charge pourra être suivi par d'autres filtres, faisant ainsi une nouvelle modification dans la signification de cette statistique. Si, dans le futur, un filtre de balance de charge est suivi par un autre filtre, il ne sera plus garanti que la requête, qui incrémente use_master, sera belle et bien exécutée sur un esclave.

La signification pour la version 1.1.0 est la suivante. Nombre de requêtes envoyées aux maîtres. Les requêtes dirigées vers un maître par un filtre utilisateur (une fonction de rappel définie par l'utilisateur) ne sont pas incluses. Mais elles le seront dans la statistique use_master_callback.

Depuis la version 1.0.0.
use_slave_guess Nombre de requêtes dont l'analyseur de requêtes recommande d'envoyer vers un esclave car la requête ne contient aucune astuce SQL pour forcer l'utilisation d'un serveur en particulier. Cette recommandation peut être modifiée par la suite. Il n'est pas garanti que la requête soit bien exécutée sur un esclave. Cela signifie juste que la fonction is_select interne a indiqué qu'un esclave devrait être utilisé. Rapportez-vous à la fonction mysqlnd_ms_query_is_select() de l'espace utilisateur. Depuis la version 1.1.0.
use_master_guess Nombre de requêtes dont l'analyseur interne recommande d'envoyer vers un maître car la requête ne contient aucune astuce SQL pour forcer l'utilisation d'un serveur en particulier. Cette recommandation peut être modifiée par la suite. Il n'est pas garanti que la requête soit bien exécutée sur un esclave. Cela signifie juste que la fonction is_select interne a indiqué qu'un maître devrait être utilisé. Rapportez-vous à la fonction mysqlnd_ms_query_is_select() de l'espace utilisateur. Depuis la version 1.1.0.
use_slave_sql_hint Nombre de requêtes envoyées à un esclave par le fait que la requête commence par une astuce SQL pour forcer l'utilisation d'un esclave. Depuis la version 1.0.0.
use_master_sql_hint Nombre de requêtes envoyées au maître par le fait que la requête commence par une astuce SQL pour forcer l'utilisation du maître. Depuis la version 1.0.0.
use_last_used_sql_hint Nombre de requêtes envoyées au serveur qui a exécuté les précédentes requêtes, par le fait que la requête commence par une astuce SQL pour forcer l'utilisation du serveur précédemment utilisé. Depuis 1.0.0.
use_slave_callback Nombre de requêtes envoyées à l'esclave en raison d'une fonction de rappel utilisateur choisissant un serveur esclave pour l'exécution des requêtes. Depuis 1.0.0.
use_master_callback Nombre de requêtes envoyées au maître en raison d'une fonction de rappel utilisateur choisissant un serveur esclave pour l'exécution des requêtes. Depuis 1.0.0.
non_lazy_connections_slave_success Nombre de connexions ouvertes avec succès vers un esclave avec une configuration n'utilisant pas les lazy connections. Le nombre total de connexions ouvertes avec succès vers un esclave correspond à non_lazy_connections_slave_success + lazy_connections_slave_success Depuis 1.0.0.
non_lazy_connections_slave_failure Nombre de connexions échouées vers un esclave avec une configuration n'utilisant pas les lazy connections. Le nombre total de connexions échouées vers un esclave correspond à non_lazy_connections_slave_failure + lazy_connections_slave_failure Depuis 1.0.0.
non_lazy_connections_master_success Nombre de connexions ouvertes avec succès vers un maître avec une configuration n'utilisant pas les lazy connections. Le nombre total de connexions ouvertes avec succès vers un maître correspond à non_lazy_connections_master_success + lazy_connections_master_success Depuis 1.0.0.
non_lazy_connections_master_failure Nombre de connexions échouées vers un maître avec une configuration n'utilisant pas les lazy connections. Le nombre total de connexions échouées vers un maître correspond à non_lazy_connections_master_failure + lazy_connections_master_failure Depuis 1.0.0.
lazy_connections_slave_success Nombre de connexions ouvertes avec succès vers un esclave avec une configuration utilisant les lazy connections. Depuis 1.0.0.
lazy_connections_slave_failure Nombre de connexions échouées vers un esclave avec une configuration utilisant les lazy connections. Depuis 1.0.0.
lazy_connections_master_success Nombre de connexions ouvertes avec succès vers un maître avec une configuration utilisant les lazy connections. Depuis 1.0.0.
lazy_connections_master_failure Nombre de connexions échouées vers un maître avec une configuration utilisant les lazy connections. Depuis 1.0.0.
trx_autocommit_on Nombre d'activations du mode autocommit via des appels à l'API. Peut être utilisé pour surveiller l'activité relative à la configuration trx_stickiness du plugin. Si, par exemple, vous souhaitez savoir si un appel particulier à l'API invoque la fonction trx_autocommit() de la bibliothèque mysqlnd, ce qui est une nécessité pour trx_stickiness, vous pouvez appeler la fonction utilisation de l'API en question, et vérifier si les statistiques ont été modifiées. Les statistiques sont modifiées uniquement par la méthode trx_autocommit() interne du plugin. Depuis 1.0.0.
trx_autocommit_off Nombre de désactivations du mode autocommit via des appels à l'API. Depuis 1.0.0.
trx_master_forced Nombre de requêtes redirigées vers le maître alors que trx_stickiness=master et le mode autocommit sont désactivés. Depuis 1.0.0.
gtid_autocommit_injections_success Noombre d'injections SQL avec succès en mode autocommit, faisant parti du plugin côté client de l'émulation de l'ID de transaction globale. Depuis 1.2.0.
gtid_autocommit_injections_failure Nombre d'injections SQL échouées en mode autocommit, faisant parti du plugin côté client de l'émulation de l'ID de transaction globale. Depuis 1.2.0.
gtid_commit_injections_success Nombre d'injections SQL avec succès en mode commit, faisant parti du plugin côté client de l'émulation de l'ID de transaction globale. Depuis 1.2.0.
gtid_commit_injections_failure Nombre d'injections SQL échouées en mode commit, faisant parti du plugin côté client de l'émulation de l'ID de transaction globale. Depuis 1.2.0.
gtid_implicit_commit_injections_success Nombre d'injections SQL avec succès lorsqu'un commit implicite est détecté, faisant parti du plugins côté client de l'émulation de l'ID de transaction globale. Les commits implicites surviennent, par exemple, lorsque l'autocommit a été désactivé, une requête est exécutée, puis, l'autocommit ré-activé. Dans ce cas, la requête sera commité par le serveur et le SQL sera injecté avant la ré-activation de l'autocommit. Voici d'autres séquences pour lesquelles le commit est implicite : begin(), query(), begin(). Un second appel à begin() va implicitement valider la transaction commencée par le premier appel à begin(). begin() correspond à des appels de la bibliothèques internes, et non des appels de l'API utilisateur de PHP. Depuis 1.2.0.
gtid_implicit_commit_injections_failure Nombre d'injections SQL échouées lorsque le commit implicite est détecté, faisant parti du plugins côté client de l'émulation de l'ID de transaction globale. Les commits implicites surviennent, par exemple, lorsque l'autocommit a été désactivé, une requête est exécutée, puis, l'autocommit ré-activé. Dans ce cas, la requête sera commité par le serveur et le SQL sera injecté avant la ré-activation de l'autocommit. Depuis 1.2.0.
transient_error_retries Le nombre de tentative de l'opération avant qu'une erreur passagère ne soit détectée. Voir aussi le fichier de configuration du plugin transient_error. Depuis 1.6.0.
fabric_sharding_lookup_servers_success Le nombre d'appels réussis à la procédure distante sharding.lookup_servers à MySQL Fabric. Un appel est considéré comme réussi si le plugin peut atteindre MySQL Fabric et récupérer une réponse. La réponse en elle même peut ou non être comprise par le plugin. Le succès correspond seulement au transport réseau. Si la réponse n'a pas été comprise ou indique une erreur valide, fabric_sharding_lookup_servers_xml_failure sera incrémenté. Depuis 1.6.0.
fabric_sharding_lookup_servers_failure Le nombre d'échec suite aux appels à la procédure distante sharding.lookup_servers de MySQL Fabric. Un appel à une procédure distante est considéré en échec s'il y a une erreur réseau lors d'une connexion, d'une écriture ou d'une lecture depuis MySQL Fabric. Depuis 1.6.0.
fabric_sharding_lookup_servers_time_total Temps passé à se connecter, à écrire ou à lire depuis MySQL Fabrich pendant l'appel à la procédure distante sharding.lookup_servers. La valeur est agrégée pour tous les appels. Le temps est mesuré en microsecondes. Depuis 1.6.0.
fabric_sharding_lookup_servers_bytes_total Nombre total d'octets reçus depuis MySQL Fabric en réponse aux appels à sharding.lookup_servers calls. Depuis 1.6.0.
fabric_sharding_lookup_servers_xml_failure Le nombre de fois d'une réponse depuis MySQL Fabric aux appels à sharding.lookup_servers n'a pas été compris. Veuillez noter que l'implémentation expérimentale courrante ne distingue pas les erreurs valides retournées, et les réponses mal formées. Depuis 1.6.0.
xa_begin Le nombre de transactions distribuées/XA qui ont été démarrées en utilisant la fonction mysqlnd_ms_xa_begin(). Depuis 1.6.0.
xa_commit_success Le nombre de transactions distribuées/XA qui ont été validées avec succès en utilisant la fonction mysqlnd_ms_xa_commit(). Depuis 1.6.0.
xa_commit_failure Le nombre de transactions distribuées/XA qui ont échoué lors d'une tentative de validation en utilisant la fonction mysqlnd_ms_xa_commit(). Depuis 1.6.0.
xa_rollback_success Le nombre de transactions distribuées/XA qui ont été annulées avec succès en utilisant la fonction mysqlnd_ms_xa_rollback(). Ceci n'inclue pas les annulations implicites effectuées comme conséquence d'un échec lors de l'appel à la fonction mysqlnd_ms_xa_commit(). Depuis 1.6.0.
xa_rollback_failure Le nombre de transactions distribuées/XA qui n'ont pas pu être annulées. Ceci inclue les échecs de la fonction mysqlnd_ms_xa_rollback() mais aussi, les échecs d'annulation lors de la fermeture d'une connexion, si l'option rollback_on_close est définie. Voir aussi l'option xa_rollback_on_close ci-dessous. Depuis 1.6.0.
xa_participants Le nombre total de participants dans toutes les transactions XA commencées avec la fonction mysqlnd_ms_xa_begin(). Depuis 1.6.0.
xa_rollback_on_close Le nombre de transactions XA qui ont été annulées implicitement lorsqu'une connexion est fermée et que l'option rollback_on_close est définie. Suivant l'implémentation de votre code, ceci peut représenter une faille sachant que vous devriez préférer nettoyer les ressources explicitement. Depuis 1.6.0.
pool_masters_total Nombre de serveurs maîtres (connexions) dans le pool de connexion interne. Depuis 1.6.0.
pool_slaves_total Nombre de serveurs esclaves (connexions) dans le pool de connexion interne. Depuis 1.6.0.
pool_masters_active Nombre de serveurs maîtres (connexions) depuis le pool de connexion interne qui sont actuellement en cours d'utilisation pour prendre une connexion. Depuis 1.6.0.
pool_slaves_active Nombre de serveurs esclaves (connexions) depuis le pool de connexion interne qui sont actuellement en cours d'utilisation pour prendre une connexion. Depuis 1.6.0.
pool_updates Le nombre de fois que la liste des connexions actives a été remplacée et qu'un nouveau jeu de maître et d'esclaves a été installé. Depuis 1.6.0.
pool_master_reactivated Le nombre de ré-utilisation d'une connexion maître après avoir été ajoutée à la liste active. Depuis 1.6.0.
pool_slave_reactivated Le nombre de ré-utilisation d'une connexion esclave après avoir été ajoutée à la liste active. Depuis 1.6.0.

Exemples

Exemple #1 Exemple avec mysqlnd_ms_get_stats()

<?php
printf
("mysqlnd_ms.enable = %d\n"ini_get("mysqlnd_ms.enable"));
printf("mysqlnd_ms.collect_statistics = %d\n"ini_get("mysqlnd_ms.collect_statistics"));
var_dump(mysqlnd_ms_get_stats());
?>

L'exemple ci-dessus va afficher :

mysqlnd_ms.enable = 1
mysqlnd_ms.collect_statistics = 1
array(26) {
  ["use_slave"]=>
  string(1) "0"
  ["use_master"]=>
  string(1) "0"
  ["use_slave_guess"]=>
  string(1) "0"
  ["use_master_guess"]=>
  string(1) "0"
  ["use_slave_sql_hint"]=>
  string(1) "0"
  ["use_master_sql_hint"]=>
  string(1) "0"
  ["use_last_used_sql_hint"]=>
  string(1) "0"
  ["use_slave_callback"]=>
  string(1) "0"
  ["use_master_callback"]=>
  string(1) "0"
  ["non_lazy_connections_slave_success"]=>
  string(1) "0"
  ["non_lazy_connections_slave_failure"]=>
  string(1) "0"
  ["non_lazy_connections_master_success"]=>
  string(1) "0"
  ["non_lazy_connections_master_failure"]=>
  string(1) "0"
  ["lazy_connections_slave_success"]=>
  string(1) "0"
  ["lazy_connections_slave_failure"]=>
  string(1) "0"
  ["lazy_connections_master_success"]=>
  string(1) "0"
  ["lazy_connections_master_failure"]=>
  string(1) "0"
  ["trx_autocommit_on"]=>
  string(1) "0"
  ["trx_autocommit_off"]=>
  string(1) "0"
  ["trx_master_forced"]=>
  string(1) "0"
  ["gtid_autocommit_injections_success"]=>
  string(1) "0"
  ["gtid_autocommit_injections_failure"]=>
  string(1) "0"
  ["gtid_commit_injections_success"]=>
  string(1) "0"
  ["gtid_commit_injections_failure"]=>
  string(1) "0"
  ["gtid_implicit_commit_injections_success"]=>
  string(1) "0"
  ["gtid_implicit_commit_injections_failure"]=>
  string(1) "0"
  ["transient_error_retries"]=>
  string(1) "0"
}