php - 如何在不增加最大连接数的情况下处理 PHP 中过多的数据库连接?

标签 php mysql

有一个名为 function.php 的文件,我使用 require_once 将它调用到我网站的所有页面中。该文件包含一百多个函数。

我从 mysqli_connect() 得到 max_user_connections 错误,紧接着

mysqli_query() expects parameter 1 to be mysqli, boolean given

error shown when there are too many visitors or search engine bots are crawling fast.

The function file is like this:

<?php 
function db_connect(){
    $link=mysqli_connect("host","dbuser","dbpass","dbname");
    if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    mysqli_query($link,"set names 'utf8'");
}

db_connect();

function func_1(){
    $result=mysqli_query($link,"select * from ...");
    ...
}

function func_2(){
    $result=mysqli_query($link,"select * from ...");
    ...
}

.
.
.

function func_100(){
    $result=mysqli_query($link,"select * from ...");
    ...
}
?>

最后我关闭了数据库连接。因为我已经检查过我的数据库的每个用户的最大连接数是 50 并且主机提供商不会更改它(他们说这已经足够了)。

那么,通常我该如何处理这个问题? (简单的 PHP 或 OOP)

最佳答案

在处理每个网页请求的过程中,您显然打开了多个到 MySQL 服务器的连接。

在代码文件中定义 db_connect() 函数之后,您可以立即调用该函数。这可能导致它被调用得比必要的更频繁。每次调用它时,它都会消耗连接池中的稀缺资源。

相反,做一些工作以确保处理每一页的代码最多调用一次该函数。最好将 MySQL 连接作为处理逻辑的一部分进行管理,而不是依靠 require_once 为您完成。确保在使用完后关闭打开的连接。

当您确定每个正在处理的页面最多打开一个 MySQL 连接时,您可能需要减少您的网络服务器可以同时处理的 php 文档的数量。这可以通过调整 Apache Web 服务器参数 MaxClients 和/或 MaxRequestsPerChild 来完成。另一个流行的网络服务器 nginx 也有类似的参数。减少此容量不会损害您的用户,因为网络服务器处理来自队列的页面请求。

关于php - 如何在不增加最大连接数的情况下处理 PHP 中过多的数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45399662/

相关文章:

php - 具有多个选项过滤器 mysql 和 php 的产品

php - 如何从 PHP 数组中删除所有重复项?

mysql - 计算开始和结束的单独 MYSQL 行的平均事务持续时间?

mysql - SQL 给定时间给定节点的求和值

php - MySQL 服务器在 PHP 脚本中保留 "going away"

mysql - 如何针对写入优化 MySQL 数据库?

php - 如果记录存在则删除,否则退出 MySQL

php - Paypal 地址覆盖不起作用

php - 单项执行出错

MySQL 更新,设置在哪里不起作用?