mysqli的打开与对多个新工艺:连接选项(mysqli opens multiple new pr

2019-08-17 13:41发布

这是我第一次问一个问题就在这里。 我已经冲刷谷歌,计算器等,寻找与我遇到的问题的帮助。 目前,我们正在使用PHP 5.3.10和MySQL 5.0.95与Apache 2.2.21(CentOS的)。

我们在开始从旧的MySQL库削减了在新的代码库MySQLi的过程中,我领导负责。 我试过了

  • 确保我明确地关闭数据库连接时,我用它做
  • 释放的结果集时,我要和他们一起做
  • 正在增加从150的连接限制到250

有包含文件(具有会话检查等做)使用老式mysql_pconnect()来验证某些事情。 这些都包含在几乎所有的我们的代码。

类似的代码:

$mysqli =  new mysqli('p:'.DBHOST, DBUSER, DBPASS, $_SESSION['dbname']);
if ($mysqli->connect_error) {
    throw new Exception($mysqli->connect_error,  $mysqli->connect_errno);
    exit;
}
// do my stuff here, a bunch of SQL queries like:
$sql = 'SELECT * FROM MyTable';
$result = $mysqli->query($sql);
if (!$result) {
    throw new SQLException($sql, $mysqli);
    exit;  
    // SQLException is an extension to mysqli_sql_exception that adds the 
    // query into the messaging internally
}
while ($result && $row = $result->fetch_assoc()) {
// do stuff here, like show it on screen, etc., all works normally
}
$result->free(); // free up the result
$mysqli->close(); // close the connection to the database

释放的结果和关闭连接中的事情,我得到一个“太多的连接”的错误之后做了。 在这之前,我想每一个我跑我的程序时获得3-4新的数据库连接。 (与SHOW PROCESSLIST后端看去)

该问题在一定程度上减轻了(将其添加0〜3的新连接,而不是每次3个新连接)。

我的一些阅读的建议,这可能有一些做与Apache线程+添加如果在当前线程没有现有闲置那些新的持久连接。 是不是这样? 是持久连接不做mysqli的支持呢? (我应该放弃对持久性?)

感谢您的任何建议。

Answer 1:

我有mysqli的持久连接没有任何经验,但大家的一些问题,并期望看起来很奇怪我。

mysqli的打开与对多个新工艺:连接选项

是的,这就是永久连接是

确保我明确地关闭数据库连接时,我用它做

你不能确保你关闭它明确为你不能做到这一点。 同样,因为永久连接的唯一的一点是持续开放

每个我跑我的程序的时候,我会得到3-4新的数据库连接。

所以,你必须确保你只有一个正在开启。

  • 您可以从您的脚本至少两个所连接 - 一个古老的风格和一些从mysqli的?
  • 有多少被实例化mysqli的对象?
  • 有多少PHP脚本中运行服务于一个HTTP请求? 你确定吗?

毕竟,如果你烦恼那么多,为什么你正在使用的持久连接? 你是从它的真实(不是虚构的)好处? 毕竟,如果你的版本是5.3,所以与所有从MySQL改写烦恼呢?



文章来源: mysqli opens multiple new processes with p: connect option
标签: php mysqli