pgpool 连接池使用文档

简述

pgpool 连接池采用进程模型,每个业务的连接,都会连接到pgpool的其中一个进程。

pgpool

|

V

—- 进程1 —-| —- 进程2 —- | —- 进程3 —-| —- num_init_children —-

|

V

poo1

poo2

max_pool

每个进程下,最多会建立max_pool 个到pg的连接。并建立 num_init_children 个进程。因此pgpool 与 pg 最多会建立 num_init_children * max_pool 个连接。而pgpool 最多会接收 num_init_children 个业务的连接。

因此当pg的连接数不够用的时候,可以减小max_pool的配置到1.否则会浪费很多的连接。

pgpool 只支持session级别的连接池功能,不支持其他级别。连接池会降低pg服务端启动pg进程时cpu/mem的消耗。因此如果业务是长连接,不是秒级别的连接后就断开,那么连接池是没有必要的。

若是该pgpool一直使用同一个database/username 连接该pgpool,那么根据缓存规则,将最多只有 num_init_children 个连接。因为缓存是根据database/username进行的。所以pgpool与pg的连接数量并非永远保持num_init_children * max_pool 个。

配置连接池

connection_cache

设置 on 启动连接池

max_pool

在pgpool子进程中缓存的最大连接数。当有新的连接使用相同的用户名连接到相同的数据库,pgpool将重用缓存的连接。如果不是,则 pgpool建立一个新的连接到 PostgreSQL。如果缓存的连接数达到了 max_pool,则最老的连接将被抛弃,并使用这个槽位来保存新的连接。

num_init_children

pgpool服务进程数。也是 pgpool支持的从客户端发起的最大并发连接数。如果超过 num_init_children 数的客户端尝试连接到 pgpool-II,它们将被阻塞(而不是拒绝连接),直到到任何一个 pgpool-II 进程的连接被关闭为止。最多有 2*num_init_children 可以被放入等待队列。

reset_query_list

PostgreSQL versionreset_query_list
7.1 or earlier'ABORT'
7.2 to 8.2'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'
8.3 or later'ABORT; DISCARD ALL'

connection_life_time

pgpool->pg 建立的连接,当该连接无人使用时,达到该秒数后,pgpool->pg的连接将被关闭。

child_life_time

pgpool子进程的生命周期,单位为秒。如果子进程空闲了这么多秒(没有业务连接到该进程),它将被终止,一个新的子进程将被创建。这个参数是用于应对内存泄露和其他不可预料错误的一个措施。默认值为 300 (5分钟)。0 将禁用本功能。

因为pgpool是进程模型,子进程退出后,该进程下max_pool个pgpool->pg的连接,将被关闭掉。

show pool_pools 会显示 (0:16 before process restarting) 还有多长时间,该进程会被终止。

client_idle_limit

当一个客户端在执行最后一条查询后如果空闲到了 client_idle_limit 秒数,到这个客户端的连接将被断开。

不论业务与pgpool的连接是处于事务中,还是非事务的idle状态,都会断开连接。断开 业务->pgpool 和 pgpool -> pg(max_pool个), 都会被断开, 不只是业务与pgpool的连接。

child_max_connections

当该子进程,接收到这么多次的连接时,将终止该进程,并重新启动一个进程。(该参数命名容易引起误解)。

比如 psql 连接,退出,假如设置的3, 那么执行第4次psql的时候,show pool_pools 会看到之前的进程已经退出,并启动了一个新的id的进程。

show pool_pools 通过 client_connection_count 列,可以看到该进程已经被连接了多少次。

查询指令

参数查询

lzzhang=# pgpool show max_pool;
max_pool
----------
2
(1 row)

设置参数

lzzhang=# PGPOOL SET client_idle_limit = 350;
SET
lzzhang=# PGPOOL SET client_idle_limit to default;
SET

只对当前连接有效

查询全部参数

lzzhang=# SHOW POOL_STATUS;
                item                 |                             value                             |                                   description                                  
---------------------------------------+-----------------------------------------------------------------+---------------------------------------------------------------------------------
backend_clustering_mode               | 1                                                               | clustering mode
listen_addresses                     | localhost                                                       | host name(s) or IP address(es) to listen on
port                                 | 9999                                                           | pgpool accepting port number
unix_socket_directories               | /tmp                                                           | pgpool socket directories
unix_socket_group                     |                                                                 | owning user of the unix sockets

查询后端节点信息

lzzhang=# SHOW POOL_NODES;
node_id | hostname | port | status | pg_status | lb_weight | role   | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change  
---------+-----------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------
0       | localhost | 5432 | up     | unknown   | 0.500000 | standby | unknown | 0         | true             | 0                 |                   |                       | 2024-01-03 14:46:02
(1 rows)

查询pgpool进程信息

lzzhang=# SHOW POOL_PROCESSES;
pool_pid |                     start_time                     | client_connection_count | database | username | backend_connection_time | pool_counter |       status        
----------+------------------------------------------------------+-------------------------+----------+----------+-------------------------+--------------+---------------------
1413184 | 2024-01-03 15:46:42                                 | 2                       | lzzhang1 | lzzhang1 | 2024-01-03 15:53:16     | 1           | Idle
1413185 | 2024-01-03 15:46:42 (4:04 before process restarting) | 1                       |         |         |                         |             | Wait for connection
1413186 | 2024-01-03 15:46:42                                 | 2                       | lzzhang | lzzhang | 2024-01-03 15:46:45     | 2           | Execute command
(3 rows)

每次返回 num_init_children 条数信息
status: 列可以看出,这个进程的是否有人使用
其余信息不是很重要,可以通过 https://www.pgpool.net/docs/latest/en/html/sql-show-pool-processes.html 获得

查看pgpool连接池信息

lzzhang2=> SHOW POOL_pools;
pool_pid |                     start_time                     | client_connection_count | pool_id | backend_id | database | username | backend_connection_time | client_connection_time | client_disconnection_time | cli
ent_idle_duration | majorversion | minorversion | pool_counter | pool_backendpid | pool_connected |       status       | load_balance_node
----------+------------------------------------------------------+-------------------------+---------+------------+----------+----------+-------------------------+------------------------+---------------------------+----
------------------+--------------+--------------+--------------+-----------------+----------------+---------------------+-------------------
1413184 | 2024-01-03 15:46:42                                 | 2                       | 0       | 0         | lzzhang | lzzhang | 2024-01-03 15:48:08     | 2024-01-03 15:51:44   | 2024-01-03 15:51:56       | 0  
                | 3           | 0           | 2           | 1413295         | 0             | Idle               | 0
1413184 | 2024-01-03 15:46:42                                 | 2                       | 1       | 0         | lzzhang1 | lzzhang1 | 2024-01-03 15:53:16     | 2024-01-03 15:53:16   |                           | 0  
                | 3           | 0           | 1           | 1447750         | 1             | Idle               | 1
1557612 | 2024-01-03 15:58:11                                 | 1                       | 0       | 0         | lzzhang2 | lzzhang2 | 2024-01-03 16:03:30     | 2024-01-03 16:03:33   | 2024-01-03 16:03:32       | 0  
                | 3           | 0           | 2           | 1657383         | 1             | Execute command     | 1
1557612 | 2024-01-03 15:58:11                                 | 1                       | 1       | 0         |         |         |                         |                       |                           | 0  
                | 0           | 0           | 0           | 0               | 0             | Execute command     | 0
1413186 | 2024-01-03 15:46:42 (2:32 before process restarting) | 3                       | 0       | 0         | lzzhang | lzzhang | 2024-01-03 15:46:45     | 2024-01-03 15:53:40   | 2024-01-03 16:03:29       | 0  
                | 3           | 0           | 2           | 1413191         | 0             | Wait for connection | 0
1413186 | 2024-01-03 15:46:42 (2:32 before process restarting) | 3                       | 1       | 0         | lzzhang1 | lzzhang1 | 2024-01-03 15:52:40     | 2024-01-03 15:52:40   | 2024-01-03 15:53:38       | 0  
                | 3           | 0           | 1           | 1433534         | 0             | Wait for connection | 0
(6 rows)

status:
Execute command: 正在执行命令
Idle: 等待客户端执行新的指令
Idle in transaction: 已经处于事务中,等待客户端的新的指令
Wait for connection: 等待客户端连接

已经建立到pg的连接database/username是非空的,若database/username是空的则该池没有建立到pgpool的连接
pool_pools 与 pool_processes 通过 pool_pid 进行关联。
pool_pools 中同一个pool_pid的条数与 max_pool 是相等的,所以可以查询到全部的缓存的信息
每次返回 num_init_children * max_pool * number_of_backends 信息,

更多内容可以参考: https://www.pgpool.net/docs/latest/en/html/sql-show-pool-pools.html
文章浏览总量 754 次

要发表评论,您必须先登录