MySQL中的睡眠连接过多

时间:2018-11-23 12:05:48

标签: mysql

我正在使用MySQL数据库,该数据库托管在Google Compute Engine上,可以通过PHP从另一个计算引擎访问。

每当我跑步

SHOW PROCESSLIST

结果大约有5-6个睡眠连接,这对我来说还可以,因为它不会降低系统性能。但是只要网站上的流量很大,睡眠连接就会增加到100+,从而导致整个系统变慢。

我在线检查了一下,发现这些睡眠连接是打开的mysql连接,正在等待命令。

但是在每次查询后我都会关闭SQL连接。这是我如何使用PHP访问MySQL DB的示例。

function db_connect()
{
    $host = "100.100.100.100"; // dummy
    $username = "abc";
    $pass = "1234";
    $db = "database";
    $connection = new mysqli($host, $username, $pass, $db);
    $connection->set_charset("utf8");
    return $connection;
}
function closeConnection($db)
{
    $db->close();
}
function runQuery($query)
{
    $db = db_connect();
    $sql = $db->query($query);
    closeConnection($db);
    return $sql;
}

我将SQL语句传递给runQuery函数,该函数打开一个新连接并在执行查询后将其关闭。我知道为页面上的每个查询打开新连接都会降低页面的性能,但是通过这种方式,我可以确定我不会打开任何连接。

仍然,当交通繁忙时,我正在进入睡眠连接。

我在下面附上了“ SHOW PROCESSLISTLIST”示例。

Sample SHOW PROCESSLIST result when traffic is high

请帮助我解决此问题。

0 个答案:

没有答案