Postgresql
PGPool 記憶體要求
對於執行連接池和負載平衡但沒有查詢記憶體的專用 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 = 32和max_pool = 4)
- 共享記憶體:32 * 4 * 17408 = 2228224 字節 = 2.1 MB。
- 程序記憶體:32 * 5 = 160 MB