如何优化数据库的连接和查询,防止MySQL内存耗尽


How to optimize a database connection and query, to prevent MySQL run out of memory?

我有一个db连接的类,我试图使用它来限制连接到服务器的数量。

如果我有很多用户,sql server由于内存不足而崩溃。它可以是服务器设置,也可以与代码有关?我非常感谢大家的建议。

__destruct杀死了连接,但是它是否释放了结果以接受更多的查询?

我把示例代码留在这里:

class db{
    public $db_connection;

    public function __construct(){
        $this->db_connection = new mysqli("127.0.0.1","myuser","passwd","dbname");
        $this->db_connection->set_charset("utf8");
        if($this->db_connection->connect_errno) {
            echo "Failed to connect to database: " . $db_connection->connect_error;
        }
    }
    public function __destruct(){
        return $this->db_connection->close();
    }
}

启动db连接,通常我在header中这样做,所以我可以在整个页面中重用连接。

$db = new db();

随机页上的典型查询:(一页上可以有多个)

<div class="container">
    <div class="row">
        <div class="col-md-12">
            $result = $db->db_connection->query("SELECT * FROM news");
            if ($result) { 
                while ($obj = $result->fetch_object()) {    
                    //some html code here
                }
            }
        </div>
    </div>
</div>

每个连接到你的页面将尝试打开一个连接到MySQL。每次页面加载都将从'news'表中检索所有内容。

MySQL可以处理的连接数是有限制的,一旦超过这个限制,页面就会中断。

一个PHP类不会限制到MySQL服务器的连接数。限制连接数的是你运行了多少web服务器进程,以及这些进程中有多少在执行PHP。

你应该考虑使用某种基于本地文件的缓存(例如,计划任务将'news'数据写入静态html文件,然后每个页面加载只包含'news.html')。这将允许您从页面的呈现中删除数据库连接和查询。

或者,使用CloudFlare之类的东西(假设您的页面是相当静态的,并且正在设置缓存友好的标题)