php - the - mysql_connect VS mysql_pconnect
the server requested authentication method unknown to the client laravel (5)
Básicamente, tienes que equilibrar el costo de crear conexiones versus mantener las conexiones. A pesar de que MySQL es muy rápido en la configuración de una nueva conexión, aún cuesta, en el tiempo de configuración del hilo, y en el tiempo de configuración de TCP / IP desde su servidor web. Esto es notable en un sitio de tráfico lo suficientemente alto. Desafortunadamente, PHP no tiene ningún control sobre la persistencia de las conexiones. Entonces, la respuesta es bajar el tiempo de inactividad en MySQL (por ejemplo, hasta 20 segundos) y aumentar el tamaño de la caché de subprocesos. Juntos, esto generalmente funciona notablemente bien.
Por otro lado, su aplicación debe respetar el estado de la conexión. Lo mejor es que no haga suposiciones sobre en qué estado se encuentra la sesión. Si usa tablas temporales, entonces el uso de CREATE IF NOT EXISTS y TRUNCATE TABLE ayuda mucho, al igual que nombrarlas de manera única (como incluirlas como ID de usuario). Las transacciones son un poco más problemáticas; pero tu código siempre puede hacer ROLLBACK en la parte superior, por las dudas.
Tengo esta duda, he buscado en la web y las respuestas parecen estar diversificadas. ¿Es mejor usar mysql_pconnect sobre mysql_connect cuando se conecta a una base de datos a través de PHP? Leí que pconnect escala mucho mejor, pero por otro lado, ser una conexión persistente ... tener 10 000 conexiones al mismo tiempo, todas persistentes, no parece escalable para mí.
Gracias por adelantado.
Es muy poco probable que llegue a 10000 conexiones. De todos modos, ve a la fuente oficial . (Énfasis mío).
Si las conexiones persistentes no tienen ninguna funcionalidad adicional, ¿para qué sirven?
La respuesta aquí es extremadamente simple: eficiencia. Las conexiones persistentes son buenas si la sobrecarga para crear un enlace a su servidor SQL es alta. Si esta sobrecarga es o no realmente alta depende de muchos factores. Por ejemplo, qué tipo de base de datos es, ya sea que esté o no en la misma computadora en la que se encuentra su servidor web, cuán cargada está la máquina en la que se encuentra el servidor SQL, etc. En resumidas cuentas, si esa sobrecarga de conexión es alta, las conexiones persistentes lo ayudarán considerablemente . Hacen que el proceso secundario simplemente se conecte una sola vez durante toda su vida útil, en lugar de cada vez que procesa una página que requiere conectarse al servidor SQL. Esto significa que por cada niño que abrió una conexión persistente tendrá su propia conexión persistente abierta al servidor. Por ejemplo, si tuviera 20 procesos secundarios diferentes que ejecutaran un script que realizara una conexión persistente con su servidor SQL, tendría 20 conexiones diferentes al servidor SQL, una de cada elemento secundario.
Tenga en cuenta, sin embargo, que esto puede tener algunos inconvenientes si está utilizando una base de datos con límites de conexión que son superados por las conexiones secundarias persistentes. Si su base de datos tiene un límite de 16 conexiones simultáneas, y en el curso de una sesión de servidor ocupada, 17 subprocesos hijo intentan conectarse, uno no podrá. Si hay errores en sus scripts que no permiten el cierre de las conexiones (como bucles infinitos), la base de datos con solo 16 conexiones puede verse rápidamente inundada. Consulte la documentación de su base de datos para obtener información sobre el manejo de conexiones abandonadas o inactivas.
mysql_connect()
y mysql_pconnect()
ambos funcionan para la conexión a la base de datos pero con poca diferencia. En mysql_pconnect()
, p
significa conexión de persistencia.
Cuando estamos utilizando la función mysql_connect()
, cada vez que se abre y cierra la conexión de la base de datos, dependiendo de la solicitud.
Pero en el caso de la función mysql_pconnect()
:
En primer lugar, al conectarse, la función intentará encontrar una conexión (persistente) que ya esté abierta con el mismo host, nombre de usuario y contraseña. Si se encuentra uno, se le devolverá un identificador en lugar de abrir una nueva conexión.
En segundo lugar, la conexión con el servidor SQL no se cerrará cuando finalice la ejecución del script. En cambio, la conexión permanecerá abierta para uso futuro (
mysql_close()
no cerrará la conexión establecida pormysql_pconnect()
).
mysql_pconncet()
es útil cuando tienes mucho tráfico en tu sitio. En ese momento, para cada solicitud, no abrirá una conexión, sino que la sacará del grupo. Esto aumentará la eficiencia de su sitio. Pero para uso general, mysql_connect () es lo mejor.
Las conexiones persistentes deberían ser innecesarias para MySQL. En otras bases de datos (como Oracle), hacer una conexión es costoso y consume mucho tiempo, por lo que si puede volver a utilizar una conexión, es una gran victoria. Pero esas marcas de bases de datos ofrecen la agrupación de conexiones, lo que resuelve el problema de una mejor manera.
Hacer una conexión a una base de datos MySQL es rápido en comparación con esas otras marcas, por lo que el uso de conexiones persistentes ofrece un beneficio proporcionalmente menor para MySQL que para otra marca de base de datos.
Las conexiones persistentes tienen un inconveniente también. El servidor de la base de datos asigna recursos a cada conexión, ya sea que las conexiones sean necesarias o no. Por lo tanto, ve una gran cantidad de recursos desperdiciados sin propósito si las conexiones están inactivas. No sé si alcanzarás 10,000 conexiones inactivas, pero incluso un par de cientos es costoso.
Las conexiones tienen estado, y sería inapropiado que una solicitud de PHP "herede" información de una sesión utilizada previamente por otra solicitud de PHP. Por ejemplo, las tablas temporales y las variables de usuario normalmente se limpian cuando se cierra una conexión, pero no si usa conexiones persistentes. Del mismo modo, configuraciones basadas en sesiones como juego de caracteres y colación. Además, LAST_INSERT_ID()
informaría el ID que se generó por última vez durante la sesión, incluso si fue durante una solicitud previa de PHP.
Para MySQL, al menos, la desventaja de las conexiones persistentes probablemente supera sus beneficios. Y hay otras técnicas mejores para lograr una alta escalabilidad.
Actualización de marzo de 2014:
La velocidad de conexión de MySQL siempre fue baja en comparación con otras marcas de RDBMS, pero se está haciendo aún mejor.
Ver http://mysqlserverteam.com/improving-connectdisconnect-performance/
En MySQL 5.6 comenzamos a trabajar en la optimización del manejo del código de conexión y desconexión. Y este trabajo se ha acelerado en MySQL 5.7. En esta publicación de blog primero mostraré los resultados que hemos logrado y luego describiré lo que hemos hecho para obtenerlos.
Lee el blog para obtener más detalles y acelerar las comparaciones.
MYSQL_CONNECT ()
1.mysql_connect se puede usar para cerrar la conexión. Cada vez que se abre y cierra la conexión de la base de datos, dependiendo de la solicitud.
2. Aquí la base de datos se abre cada vez que la página se carga en MYSQL connect
3. Cuando se carga la página, la base de datos se carga cada vez
4. Se usa para cerrar la conexión
Ejemplo:
<?php $conn = mysql_connect(‘host’, ‘mysql_user’, ‘mysql_password’); if(!$conn){ die(‘Could not connect: ‘ . mysql_error()); } echo ‘Connected successfully’; mysql_close($conn); ?>
Descripción:
host: especifica un nombre de host o una dirección IP como localhost.
mysql_user: especifica el nombre de usuario de MySQL
mysql_password: especifica la contraseña de MySQL
MYSQL_PCONNECT ()
1. Usamos el mysql_pconncet (), inicialmente intenta encontrar una conexión abierta persistente.
2.La mysql_pconncet () abre la conexión persistente
3. La mysql_pconnect () no admite la conexión cercana
4.mysql_pconnect () no puede cerrar la conexión. Aquí abre una conexión persistente a la base de datos
5. Aquí no es necesario que la base de datos esté conectada.
6. La base de datos no necesita estar conectada todas las veces en mysql_pconncet ().
más detalles: http://prittytimes.com/difference-between-mysql_connect-and-mysql_pconnect/