Question Dois-je faire un ping sur le serveur mysql avant chaque requête?


Je me demandais donc si je devais ou non faire un ping sur le serveur mysql (mysqli_ping) pour vérifier que le serveur est toujours actif avant de lancer une requête?


13
2018-06-23 17:24


origine


Réponses:


Vous ne devriez pas cingler MySQL avant une requête pour trois raisons:

  1. Ce n’est pas un moyen fiable de vérifier que le serveur sera opérationnel lorsque vous tenterez d’exécuter votre requête, il pourrait très bien s’interrompre entre la réponse au ping et la requête.
  2. Votre requête peut échouer même si le serveur est actif.
  3. À mesure que la quantité de trafic sur votre site Web augmente, vous allez ajouter beaucoup de frais supplémentaires à la base de données. Ce n'est pas rare dans les applications d'entreprise qui ont utilisé cette méthode pour voir une énorme quantité de ressources de la base de données se perdre sur les pings.

La meilleure façon de gérer les connexions aux bases de données est la gestion des erreurs (try / catch), les tentatives et les transactions.

Plus sur ceci sur le blog de performance MySQL: Vérification d'une connexion à une base de données en direct considérée comme nuisible

Dans cet article de blog, vous verrez que 73% de la charge de cette instance de MySQL a été causée par des applications vérifiant si la base de données était active.


22
2018-06-23 19:05



Je ne le fais pas. Je compte sur le fait que j'aurai une erreur de connexion si le serveur est parti et que j'essaye de faire quelque chose.

Faire le ping pourrait Vous gagnez un peu de temps et vous semblez être plus sensible à l'utilisateur, mais une erreur de connexion rapide n'est pas meilleure que d'attendre quelques secondes, suivie d'une erreur de connexion. Quoi qu'il en soit, l'utilisateur ne peut rien y faire.


12
2018-06-23 17:25



Non.

Faites-vous un ping sur SO avant de naviguer dans un navigateur, juste pour être sûr que le serveur est en cours d'exécution?


10
2018-06-23 17:26



Donc je me demandais si je devais ou   ne devrait pas cingler le serveur mysql   (mysqli_ping) pour s'assurer que le   le serveur est toujours vivant avant de fonctionner   question?

Pas vraiment. Si ce n'est pas le cas, vous en serez informé par les messages d'erreur provenant de vos requêtes ou lors de la connexion à la base de données. Vous pouvez obtenir l'erreur mysql avec:

mysql_error()

Exemple:

mysql_connect(......) or die(mysql_error());

5
2018-06-23 17:27



Ce n'est pas la manière habituelle de traiter avec ça ... S'il y a une exception, vous vous en occuperez alors.

Cela ressemble quelque peu à la différence entre vérifier si un fichier existe avant d'essayer de l'ouvrir ou attraper une exception de fichier introuvable lorsque cela se produit ... S'il s'agit d'une erreur très, très courante et probable, cela peut valoir la peine de vérifier avant, mais généralement, l'exécution devrait essayer de se dérouler normalement et les exceptions devraient être détectées et traitées lorsqu'elles se produisent.


2
2018-06-23 17:26



De manière générale, non.

Toutefois, si vous avez un script de longue durée, par exemple un processus backend appelé en tant que tâche cron, il peut s’agir d’un intervalle de temps entre la connexion et les requêtes suivantes. mysqli_ping() peut être utile.

Réglage mysqli.reconnect à vrai dans php.ini est utile dans ce cas.


1
2018-06-23 18:15



Non.

Ce n’est pas parce que le ping réussit que la requête sera exécutée. Que se passe-t-il si le serveur devient indisponible entre le moment où vous effectuez un ping et le moment où vous exécutez la requête?

Pour cette raison, vous devrez avoir une capture d'erreur appropriée autour de la requête. Et si vous le faites, vous pourriez aussi bien vous en remettre à votre erreur principale.

L'ajout du ping ajoute simplement des allers-retours inutiles, ce qui ralentit votre code.


0
2018-06-23 18:28



La seule fois où je peux penser à le faire est si la base de données est
1. non critique pour le fonctionnement de votre application, et,
2. il a tendance à être hors ligne.

À part ça, non.


0
2018-06-23 18:31



Le seul moment dans lequel il serait utile d'utiliser ping serait si vous implémentiez votre propre système de pool de connexions de base de données. Même dans ce cas, je ne cinglerais pas avant chaque requête, juste à chaque "connexion" / vérification du pool.


0
2018-06-23 20:29