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

时间:2010-01-13 15:52:49

标签: php mysql database optimization

目前,我正在我的应用初始化中打开数据库连接。这是一个相当小的应用程序,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;
}

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

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

连接数据库需要花费有限的时间。通过域套接字或命名管道进行连接时,它可以忽略不计,但如果通过网络连接,或者更糟糕的是开放式Internet,它可能会大得多。至少在请求期限内保持连接状态。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:1)

最简单的解决方案是使用mysql_pconnect() - see here

这种方式如果连接已经打开,它将使用它而不是创建一个新连接。如果不是它将再次连接