mysql 连接长期不释放及连接池相关问题

发布于 2022-09-12 13:24:54 字数 387 浏览 18 评论 0

最近接手一个老系统,其中有部分逻辑是通过脚本去完成的。

核心逻辑大概是这样:

<?php
$db = new Mysqli($db_host, $db_user, $db_password);

function doSomething($db){
    // 查询符合条件的数据
    if($exists){
        // todo
     
    }
}

while(true){
    doSomething($db);
}

这个脚本基本上是 7x24 小时在那里工作。

暂且不讨论这种处理方式是否合理,我想请问:

  1. 如果长期占用一个连接不释放,会导致什么问题吗?
  2. 上面的场景是否需要使用连接池?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

断桥再见 2022-09-19 13:24:54

1 不会有啥问题,但是要注意 mysql 的 wait_timeout 的值,脚本里面不要出现大于这个时间的空闲,免得服务端主动断开连接,所以,你可以在里的 doSomething 逻辑开始,加个连接判断,发送个 ping 命令过去,看看连接是否还能用,不能用了就重建连接.
2 不需要,简单的 php cli 程序,以单进程的方式运行,你的脚本也已顺序的方式执行,你有没有使用多线程处理,那么连接池就没有任何意义,因为就算是你做了连接池,这个进程里也就一个连接在活跃,如果你使用 swoole 以及相关技术的话,那就需要连接池了.

黯然#的苍凉 2022-09-19 13:24:54

1.我理解的是,上边代码mysqli连接数据库的链接一直存在,而且是同一个连接,每次需要的时候就调用,这样只是会有一些内存的占用,但是由于不需要重复建立连接也节省了建立连接的开销
感觉除了有内存的开销其他不会出现问题

2.不需要连接池,mysqli本身建立的连接一直保存,不会重复建立,连接池的功能本身就是为了复用原来建立的连接节省重复建立连接开销的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文