PostgreSQL和Pgpool-II的连接数和进程数
PostgreSQL 的连接数:max_connections
最大连接数:PostgreSQL能够同时拥有的最大客户端连接数。
需要根据服务器的内存和CPU资源适当进行设置。
如果连接数过多,将对系统资源造成负担;如果连接数过少,可能导致无法在需要时进行连接。
Pgpool-II 的配置:num_init_children、max_pool。
num_init_children: Pgpool-II在启动时生成的进程数量。这个数量决定了它能够接受的客户端连接数。
max_pool: 单个Pgpool-II进程能够拥有的PostgreSQL连接池的数量。对于单个客户端连接,可以重复使用多个PostgreSQL连接。
将 max_connections 的值设置为 num_init_children 乘以 max_pool 的结果所得的值。
API客户端 -> Pgpool-Ⅱ -> PostgreSQL 连接和流程
-
- 首先,API客户端开始与数据库建立连接。
-
- 这个连接是通过Pgpool来进行的。也就是说,客户端不直接连接到PostgreSQL,而是连接到Pgpool。
Pgpool进程和连接池
Pgpool在启动时生成与num_init_children相等数量的子进程。这些子进程等待客户端的连接。
当客户端请求连接时,Pgpool会将连接分配给其中的一个子进程。
每个子进程可以持有max_pool数量的连接到PostgreSQL。这些连接称为”连接池”,用于有效处理多个客户端请求。
连接到PostgreSQL
通过Pgpool进行连接后,Pgpool子进程会建立与PostgreSQL的连接。
PostgreSQL的max_connections定义了可同时接受的最大连接数,包括通过Pgpool进行的连接。
数据处理与响应
API客户端通过Pgpool发送数据库查询。
Pgpool会将这些查询路由到适当的PostgreSQL连接,并将结果返回给客户端。
连接数和内存之间的关系
-
- PostgreSQL のコネクションごとにメモリが割り当てられる。したがって、max_connections を増やすとその分だけメモリ使用量が増加する。
- Pgpool-II も同様に、num_init_children と max_pool を増やすと、それぞれの子プロセスと接続プールにメモリが必要になる。