假设有一个 php cli 文件,每2分钟运行一次与 mysql 数据写入操作。
如果是 corntab 或者 mq 的话,每一次执行都要和 mysql
脚本每 2 分钟一次,24小时下来,mysql 就会产生大量的 sleep connection,就算优化了 mysql 的 wait_timeout thread_cache_size 这些参数也没有用。
如果是 while(true) 的话,php 使用 pconnect 只有建立一个 mysql 连接,只要进程在 php 就永不释放 mysql connection 对吗?
这样是不是就能节省 mysql 连接数?
1
takatost 2015-05-12 20:12:11 +08:00
接下来你就要考虑怎么释放PHP进程的内存问题了
|
2
feiyuanqiu 2015-05-12 20:19:24 +08:00
我怎么感觉你想多了
实际上不只是你这个脚本在运行时会干这些事,所有的你的网站的涉及到数据库的页面,在用户访问的时候都会重复做这些事情,比如一个页面的 pageview 是每秒 2 次,一天下来就要重复 86400 * 2 次主楼里面的 1-6 的操作 似乎也没有浪费太多资源吧 |
3
whatisnew OP @feiyuanqiu 主要是为了减轻 mysql 服务器的压力。
|
4
tabris17 2015-05-12 20:26:10 +08:00
mysql有自己的连接池啊
|
6
mahone3297 2015-05-12 21:10:59 +08:00
1l说了,你减轻了这点不在乎的mysql资源,你换来的是无尽的内存烦恼。。。
php好像不会释放内存给os |
7
Actrace 2015-05-12 21:13:00 +08:00
pconnect 和 PDO 建立的长连接都有大量sleep的问题,实际上你只需要用普通的方式建立连接,然后执行完毕后断开然后unset变量即可,效率和你所设想的长连接方式是一样的。
ps:这个问题似乎直到 5.6.7 都没被发现和解决。 |
8
yangqi 2015-05-12 21:15:47 +08:00
你php如何结束连接的?按道理正常结束Mysql连接应该不会有sleep connection了
|
9
tabris17 2015-05-12 21:26:35 +08:00
@whatisnew mysql有内置的线程缓存,相当于连接池的功能。如果你把建立TCP连接的IO开销都算进去,那就有点杞人忧天了
|
11
tabris17 2015-05-12 22:04:44 +08:00
@whatisnew 确实不是等同,但是线程缓存已经节省了新建连接的99%的开销,在客户端使用短连接,完全可以替代连接池的作用
|
12
jamlee 2015-05-12 22:35:02 +08:00
可以考虑下读写分离 减缓服务器压力
|
13
Septembers 2015-05-13 03:23:15 +08:00
|