main.c 中,有如下说明:
/*
* shmem connection info table
* this is a three dimension array. i.e.:
* con_info[pool_config->num_init_children][pool_config->max_pool][MAX_NUM_BACKENDS]
*/
ConnectionInfo *con_info;
从 pool_process_context 的代码中也可以看到这一点:
复制代码
/*
* Return pointer to i th child, j th connection pool and k th backend
* of connection info on shmem.
*/
ConnectionInfo *pool_coninfo(int child, int connection_pool, int backend){
pool_log("Gao001…..child in pool_coninfo is: %d", child);
if (child < 0 || child >= pool_config->num_init_children){
pool_error("pool_coninfo: invalid child number: %d", child);
return NULL;
}
if (connection_pool < 0 || connection_pool >= pool_config->max_pool){
pool_error("pool_coninfo: invalid connection_pool number: %d",
connection_pool);
return NULL;
}
if (backend < 0 || backend >= MAX_NUM_BACKENDS){
pool_error("pool_coninfo: invalid backend number: %d", backend);
return NULL;
}
return &con_info [ child*pool_config->max_pool*MAX_NUM_BACKENDS+
connection_pool*MAX_NUM_BACKENDS+
backend];
}
复制代码
我们可以把con_info的pool想象成这个样子:
复制代码
child--0
connection--pool--0
backend--0
backend--1
connection--pool--1
backend--0
backend--1
connection--pool--2
backend--0
backend--1
connection--pool--3
backend--0
backend--1
child--1
connection--pool--0
backend--0
backend--1
connection--pool--1
backend--0
backend--1
connection--pool--2
backend--0
backend--1
connection--pool--3
backend--0
backend--1
……
child--127
connection--pool--0
backend--0
backend--1
connection--pool--1
backend--0
backend--1
connection--pool--2
backend--0
backend--1
connection--pool--3
backend--0
backend--1
复制代码
从这个意义上说,pgpool-II并不是一个真正的connection pool,它只是一个child 对应几个连接(比如4个),各个child之间是不会混用某个 connection 的。
本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/08/10/2631945.html,如需转载请自行联系原作者