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

# mysqlnd_ms_get_stats

(PECL mysqlnd_ms >= 1.0.0)

mysqlnd_ms_get_stats — Retourne 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"
    }

### Voir aussi

- Configuration à l'exécution
- mysqlnd_ms.collect_statistics
- mysqlnd_ms.enable
- La surveillance