SQLSTATE [1040]与Max_used_connections为1001的连接太多

时间:2012-04-13 08:24:41

标签: php mysql apache pdo connection

昨天一切正常。我向客户发送了PHP应用程序的链接。几个小时后,我查看了该页面,并在源代码中看到了以下错误:

SQLSTATE[00000] [1040] Too many connections

我也记录错误,只看到上面的消息。

在PHP应用程序中有许多请求,但只有一个特定的表(没有连接...)。我还使用自己的类进行数据库连接。其中我有一个如果之前没有设置过的句柄。

if($this->_handle == null){
    $this->Connect();
}
try{
    // make query
}
catch(PDOException $e){
    echo "An error occured: {$e->getMessage()}";
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}

因此,每个请求都不应该有新的连接。但是我从不关闭连接(不知道应该在哪里关闭它)。

  1. 是为每个用户建立的新连接,还是与多个用户使用的连接相同?
  2. 如果连接可用,我如何检查代码并向用户显示相应的消息而不是显示恶意页面?
  3. 我的代码出了什么问题,使用的连接太多了?
  4. 如果成功建立连接,我该如何记录?
  5. 这是我的连接功能:

    public function Connect(){
        try{
            $this->_handle = new PDO("mysql:host={$this->dbhost};dbname={$this->dbname}", $this->dbuser, $this->dbpasswd);
            $this->_handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        catch(PDOException $e){
            echo "An error occured: {$e->getMessage()}";
            file_put_contents('PDOErrors.txt', $e->getMessage() . chr(10) . chr(13), FILE_APPEND);
        }
    }
    

    比我在此错误后尝试搜索互联网。这就是我发现的:

    MySQL Server 5.0.77 - > Manual

    PHP 5.2.9,锁定了phpinfo()

    show variables like 'max_connections';给了我1000个!

    如果我使用SHOW STATUS;,我会看到以下内容:

    Aborted_clients         16
    Aborted_connects        15248
    Connections             1694699
    Max_used_connections    1001
    Queries                 266398903
    Table_locks_immediate   36136077
    Table_locks_waited      40387
    Threads_connected       2
    Threads_created         1694698
    Threads_running         2
    Uptime                  2143256
    
    1. 我认为我在一天内没有达到这个数量的查询,所以这是一个共享主机吗?
    2. 我可以针对太多连接问题做些什么?
    3. 目前一切正常,但如果系统上线并且有更多用户使用它,我不想要这个问题。

0 个答案:

没有答案