Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.9k views
in Technique[技术] by (71.8m points)

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

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

核心逻辑大概是这样:

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

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

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

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

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

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...