2010-01-13 22 views
6

Actualmente, estoy abriendo una conexión de base de datos en la inicialización de mi aplicación. Es una aplicación bastante pequeña, PHP si eso es relevante.¿Con qué frecuencia debo cerrar las conexiones a la base de datos?

¿Debería estar conectando a la base de datos, haciendo llamadas, luego cerrando y repitiendo este proceso para cada función de base de datos que escribo?

Por ejemplo, tengo la siguiente función que toma la variable $ db de la inicialización de mi aplicación.

function get_all_sections() 
{ 
    global $db; 
    $sql = 'select * from sections'; 

    if (!$db->executeSQL($sql, $result)) 
    { 
     throw new Exception($db->getDatabaseError()); 
     exit(); 
    } 

    $sections = array(); 

    for ($i = 0; $i < $db->numberOfRows($result); $i++) 
    { 
     $sections[] = new Section($db->fetchArray($result, MYSQLI_ASSOC)); 
    } 

    return $sections; 
} 

¿Sería mejor si abrí la conexión y luego la cerré después de que tomé las filas? Parece que hay muchas conexiones abiertas y cerradas.

+0

¿Está utilizando la agrupación de conexiones? –

+0

No por el momento. – mculp

Respuesta

5

Si tiene la agrupación de conexiones en (http://en.wikipedia.org/wiki/Connection_pool) está bien tener una nueva conexión cuando la necesite. SIN EMBARGO, yo diría que tiene el hábito de tratar cualquier recurso como "limitado" y si abre el manejador de db, manténgalo durante el mayor tiempo posible.

+2

Siempre escuché los consejos de otra manera: * siempre cierre la conexión de su base de datos lo antes posible *. – cregox

3

La conexión a la base de datos lleva un tiempo limitado. Es insignificante cuando se conecta a través de un socket de dominio o canalización con nombre, pero puede ser mucho más grande si se utiliza una conexión de red o, peor aún, Internet abierto. Déjelo conectado durante la vida de la solicitud al menos.

3

Utilice mysql_pconnect para la agrupación de conexiones, y cierre al final de cada operación. El hilo no se cerrará realmente, y el hilo será reutilizado. De esta forma es seguro y eficiente.

2

Dado que las conexiones PHP MySQL son bastante livianas, probablemente esté bien abriendo y cerrando la conexión cuando sea necesario. Lo mismo no ocurre con otras conexiones de bases de datos, como la conexión a SQL Server, que tiene conexiones bastante pesadas.

En todos los casos, sin embargo, haga lo que tenga más sentido en términos de mantenibilidad/lógica/dependencias. Luego, si nota que experimenta una desaceleración mensurable, puede optimizar las áreas que necesitan aumentar la velocidad.

En caso de duda, siga la regla de oro: No optimice prematuramente.

1

La solución más simple sería utilizar mysql_pconnect() - see here

De esta manera si la conexión ya está abierta lo utilizará en lugar de crear una nueva. Si no lo está, se conectará de nuevo

+0

Si no lo cierra cuando llega al límite, creo que recibiría un error de "demasiados clientes". Eso creo, pero por favor corrígeme si me equivoco. – tkhuynh

Cuestiones relacionadas