Postgresql

PGPool 記憶體要求

  • October 15, 2020

對於執行連接池和負載平衡但沒有查詢記憶體的專用 PGPool 機器,建議使用多少物理記憶體?

我在;中看到num_init_children(96) * max_pool(2) * number_of_backends(2) = 384線條 SHOW pool_pools每個 PID 的模態平均值似乎約為 99M,有幾個 1G 異常值

# top for 20 pgpool processes
$ top -p $(pgrep pgpool | head -20 | tr "\\n" "," | sed 's/,$//')

Tasks:  20 total,   0 running,  20 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.1 us,  4.0 sy,  0.0 ni, 92.2 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
KiB Mem :  1784080 total,    22068 free,  1629960 used,   132052 buff/cache
KiB Swap:  4194300 total,   437328 free,  3756972 used.    71276 avail Mem 

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
15407 root      20   0   97828    872    708 S   0.3  0.0   5:52.95 pgpool      
8076 root      20   0  101664   2800   1708 S   0.0  0.2   0:06.51 pgpool      
9597 root      20   0  101656   4508   1264 S   0.0  0.3   0:18.85 pgpool      
13603 root      20   0  149936  35548    984 S   0.0  2.0   1:13.56 pgpool      
13634 root      20   0  151848  39364    984 S   0.0  2.2   1:00.25 pgpool      
13677 root      20   0  149424  37812   1180 S   0.0  2.1   0:28.03 pgpool      
13680 root      20   0  153416  34948   1180 S   0.0  2.0   0:32.97 pgpool      
15397 root      20   0   97820    828    668 S   0.0  0.0   0:33.05 pgpool      
15399 root      20   0   97884    240    132 S   0.0  0.0   1:41.48 pgpool      
15402 root      20   0   93636     72      0 S   0.0  0.0   0:07.12 pgpool      
15405 root      20   0   93636    280    172 S   0.0  0.0   0:42.39 pgpool      
17121 root      20   0  101676   2016   1648 S   0.0  0.1   0:03.39 pgpool      
17206 root      20   0   97824     72      0 S   0.0  0.0   0:00.00 pgpool      
17207 root      20   0   97820    164     56 S   0.0  0.0   0:00.27 pgpool      
21348 root      20   0 3871428 1.090g   1536 S   0.0 64.1 429:48.53 pgpool      
21917 root      20   0  102672   2832   1696 S   0.0  0.2   0:49.46 pgpool      
22117 root      20   0  101692   2868   1752 S   0.0  0.2   0:16.57 pgpool      
22436 root      20   0  101692   4644   3464 S   0.0  0.3   0:31.12 pgpool      
23037 root      20   0  101692   3776   1780 S   0.0  0.2   0:20.52 pgpool      
23142 root      20   0  101664    980    936 S   0.0  0.1   0:08.60 pgpool      

官方文件中沒有記錄(截至目前 - 2018 年 2 月),但 PgPool 的記憶體佔用量相當大。

在我最近的測試中,PgPool II 3.6 版每個子程序需要多達 140 MB RAM。(子程序的數量在 中定義num_init_children)。這是私有程序記憶體- 不共享。

這意味著每 50 個客戶端大約 8GB。

與 PostgreSQL 相比,這是 5-10 倍(PostgreSQL 可以在 8 GB RAM 上輕鬆處理 250 個會話)。另外,PostgreSQL 使用共享緩衝區高速記憶體,這更具成本效益。

值得閱讀有關資源要求的官方文件。它不會涵蓋所有情況,但它會給你一個想法。

基本上,您應該考慮兩種類型的記憶體使用:共享記憶體和程序記憶體。

為了給出一個粗略的想法,他們建議使用以下方法計算共享使用記憶體:

  • Shared memory requirement (in bytes) = num_init_children * max_pool * 17408

對於程序記憶體,請使用以下公式:

  • Process memory requirement in total (in mega bytes) = num_init_children * 5

具有預設值的共享記憶體範例(num_init_children = 32max_pool = 4

  • 共享記憶體:32 * 4 * 17408 = 2228224 字節 = 2.1 MB
  • 程序記憶體:32 * 5 = 160 MB

引用自:https://dba.stackexchange.com/questions/177867