我正在使用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”示例。
请帮助我解决此问题。