我知道PHP Connection pooling in PHP中没有连接池,我们目前正在使用Pear DB。
我有一个传统的cron作业代码,它使用的是梨数据库连接。
while (true) {
...
foreach ($keys as $key) {
$connection_string = get_connection_string_based_on_key($key);
$DB = & \DB::connect($connection_string);
...
// Avoid resource leakage.
$DB->disconnect();
}
}
我们意识到DB::connect
确实给了我们一些性能热点。我计划建立一个伪连接池
$pool = array();
while (true) {
...
foreach ($keys as $key) {
$connection_string = get_connection_string_based_on_key($key);
if (array_key_exists ($connection_string, $pool) {
$DB = $pool[$connection_string];
} else {
$DB = & \DB::connect($connection_string);
$pool[$connection_string] = $DB;
}
...
// No $DB->disconnect(); As we want the
// DB connection remains valid inside the pool.
}
}
cron作业可能会运行几天,几周或几个月。我想知道,这样的伪连接池背后是否有任何问题?例如,
答案 0 :(得分:1)
这不是关于PHP代码的问题。必须在数据库系统中配置连接超时和最大并发连接数。
使用mysql时:
连接: http://www.electrictoolbox.com/update-max-connections-mysql/
超时: How can I change the default Mysql connection timeout when connecting through python?
我认为connect_timeout = 0意味着mysql db会尽可能地保持连接打开。 据我所知,没有无限连接的配置选项(就系统资源而言)。