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

0xBoo
  • 98

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

核心逻辑大概是这样:

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

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

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

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

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

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏