应该多久关闭一次数据库连接?

问题描述:

目前,我在我的应用初始化中打开数据库连接。这是一个相当小的应用程序,如果这是相关的PHP。应该多久关闭一次数据库连接?

我应该连接到数据库,进行调用,然后关闭和重复这个过程,我写的每个数据库函数?

例如,我有下面的函数,它从应用程序的初始化中获取$ db变量。

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; 
} 

如果我打开连接然后在提取行后关闭它会更好吗?这似乎是很多打开和关闭的连接。

+0

您使用连接池吗? – 2010-01-13 15:54:09

+0

目前不在。 – mculp 2010-01-13 16:09:34

如果您有连接池(http://en.wikipedia.org/wiki/Connection_pool),则可以在需要时抓取新连接。但是,我会说习惯于将任何资源视为“有限”,并且如果打开数据库句柄,请尽可能长时间保持它。

+2

我一直听到另一种方式的建议:*尽可能快地关闭数据库连接*。 – cregox 2010-05-14 21:42:32

连接到数据库需要一定的时间。当通过域套接字或命名管道连接时,它可以忽略不计,但如果通过网络连接,或者更糟的是,开放的Internet,它可能会更大。至少在请求的生命中保持连接。

使用mysql_pconnect作为连接池,并在每个操作结束时关闭。该线程不会真正关闭,线程将被重新使用。这样既安全又高效。

由于PHP MySQL连接相当轻量级,因此您可能需要时打开和关闭连接。其他数据库连接也是如此,例如连接到连接相当繁重的SQL Server。

然而,在所有情况下,在可维护性/逻辑/依赖性方面做任何最有意义的事情。然后,如果您发现自己感觉可以减速,那么您可以优化那些需要提速的区域。

如有疑问,请遵循黄金法则:不要过早优化。

最简单的办法是使用mysql_pconnect() - see here

这样,如果连接已经打开它会使用它,而不是创建一个新的。如果不是,它会再次连接

+0

如果您在达到极限时没有关闭它,则您会收到“已存在太多客户端”错误,我相信。那我想,但如果我错了,请纠正我。 – tkhuynh 2017-11-15 18:15:31