PHP - 持久连接,连接太多

时间:2015-12-01 16:12:04

标签: php sql pdo

我有一个网站,我总是有大约700到1000名在线用户。最近我经历过我的网站变得非常慢。似乎存在某种瓶颈。

我当前的设置是我有一个index.php页面,它处理我的所有子页面。设计是这样的:

include_once($settings['incpath'].'_ify_database.php');

    //Define the extra page levels. 
    $i = (isset($_GET['i']) ? inputFilter($_GET['i']) : 'h');
    $xp = (isset($_GET['p']) ? inputFilter($_GET['p']) : null);
    $xpp = (isset($_GET['n']) ? inputFilter($_GET['n']) : null);    

    switch($i){
        case 'h': // Home
            include($settings['themespath'].$config['active_theme'].'/indexheader.php');
            include($settings['pagepath'].'home.php');
            include($settings['themespath'].$config['active_theme'].'/indexfooter.php');
        break;
     }

这是我连接数据库(_ify_database.php)的方式:

try {
    $dsn = "mysql:host=" . $database['host'] . ";dbname=" . $database['db'];
    $dbh = new PDO($dsn, $database['user'], $database['pass'], array(PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT));     
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); // <== add this line
    }
catch(PDOException $e){
    echo $e->getMessage();
}

如您所见,我已将持久连接设置为false

PDO::ATTR_PERSISTENT => false

如果我将其启用到TRUE,我看到加载时间会有很大的增加,但过了一段时间我会收到Too Many Connections错误。

我做错了什么?如果网站上有500人,那就快了。如果有900-1000,则加载时间加倍。

1 个答案:

答案 0 :(得分:0)

限制来自php的最大持久连接数,或者增加mysql中的限制。尝试

ini_set('mysql.max_persistent','500');
ini_set('mysqli.max_persistent','500');

并在mysql文档中发现,似乎相关:https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html