2010-06-23 26 views
13

Entonces, me preguntaba si debo o no hacer ping al servidor mysql (mysqli_ping) para asegurarme de que el servidor esté siempre activo antes de ejecutar la consulta.¿Debo hacer ping al servidor mysql antes de cada consulta?

+17

¿De verdad espera que su servidor de base de datos esté tan a menudo? – BoltBait

+5

no hay garantía de que el servidor no se desconecte cuando lo haga ping y cuando ejecute su consulta, por lo que todavía tendrá que gestionar el error para la consulta ... ¿por qué hacerlo dos veces? – rmeador

Respuesta

22

Usted no debe de ping MySQL antes de una consulta por tres razones:

  1. No es una manera fiable de comprobar el servidor será cuando intenta ejecutar la consulta, podría muy bien pasar a la el tiempo entre la respuesta de ping y la consulta.
  2. Su consulta puede fallar incluso si el servidor está activo.
  3. A medida que aumenta la cantidad de tráfico de su sitio web, agregará una gran cantidad de sobrecarga adicional a la base de datos. No es poco común en las aplicaciones empresariales que han utilizado este método para ver cómo una gran cantidad de los recursos de la base de datos se desperdicia en ping.

La mejor manera de hacer frente a las conexiones de base de datos es el control de errores (try/catch), reintentos y transacciones.

Más sobre esto en el blog desempeño MySQL: Checking for a live database connection considered harmful

En ese blog verá el 73% de la carga en esa instancia del MySQL fue causado por aplicaciones Verificando la DB había terminado.

12

Yo no hago esto. Confío en el hecho de que tendré un error de conexión si el servidor se va y trato de hacer algo.

Haciendo el ping puede ahorrarle un poco de tiempo y parece ser más receptivo para el usuario, pero un error de conexión rápida no es mucho mejor que esperar unos segundos seguido de un error de conexión. De cualquier manera, el usuario no puede hacer nada al respecto.

+3

_might_ le ahorra tiempo _si_ el servidor está caído, si no lo está (lo que afortunadamente es el 99% del tiempo), entonces solo puede disminuir la velocidad, por supuesto, probablemente no mucho. –

2

Esta no es la forma estándar de lidiar con ella ... Si hay una excepción, la tratará entonces.

Es algo similar a la diferencia entre comprobar que existe un archivo antes de intentar abrirlo o capturar la excepción de archivo no encontrado cuando ocurre ... Si es un error muy, muy común y posible, puede ser vale la pena comprobarlo antes, pero por lo general la ejecución debería intentar funcionar normalmente y las excepciones deberían detectarse y manejarse cuando ocurran.

10

Foro de ping en lo que antes de navegar allí en un navegador, sólo para asegurarse de que el servidor está funcionando?

5

así que me preguntaba si debería o no debería ping al servidor MySQL (mysqli_ping) para garantizar que el servidor está siempre vivo antes de ejecutar consulta?

Realmente no. Si no es en vivo, sabrá a través de los mensajes de error que vienen a través de sus consultas o al conectarse a la base de datos. Usted puede obtener el error de MySQL con:

mysql_error() 

Ejemplo:

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

En términos generales, no.

Sin embargo, si usted tiene un script de larga duración, por ejemplo, un proceso de fondo que se llama como una tarea programada en el que puede haber un lapso de tiempo entre la conexión y las consultas posteriores, tal vez mysqli_ping() útiles.

El ajuste mysqli.reconnect en true en php.ini es útil en este caso.

0

El hecho de que el ping tiene éxito no significa que la voluntad consulta. ¿Qué sucede si el servidor deja de estar disponible desde el momento en que lo hace ping hasta la hora de ejecutar la consulta?

Por esta razón, tendrá que tener la correcta captura de errores alrededor de la consulta de todos modos. Y si lo hace, también podría simplemente confiar en esto como su trampa de error principal.

Agregar el ping solo agrega recorridos innecesarios, en última instancia, ralentizando su código.

0

La única vez que puedo pensar para hacer esto es si la base de datos es
1. no críticos para el funcionamiento de la aplicación, y,
2. tiene una tendencia a estar fuera de línea.

Aparte de eso, no.

0

El único momento en el que valdría la pena utilizar ping sería si estuviera implementando su propio sistema de agrupación de conexiones db. Incluso en ese caso, no haría ping antes de cada consulta, solo en cada "connect"/checkout del pool.

Cuestiones relacionadas