tail -f /dev/null

産まれたばかりの仔羊. If you haven't had any obstacles lately, you're not challenging. be the worst.

Pgpool, PostgreSQL の connection tuning

f:id:hrt0kmt:20200920073027p:plain

f:id:hrt0kmt:20200920080645p:plain

Pgpool num_init_children

  • num_init_children は client の同時接続上限数 (prefork する Pgpool-II process 数)
  • default 32 本
  • num_init_children が上限に達した場合, client は既存 process への接続が閉じるまで待たされる.
    • reserved_connections が1以上に設定されている場合を除く.
    • Postgres 側に直接接続した場合のように接続拒否 error は無い.
  • 待たされる数の上限は listen_backlog_multiplier * num_init_children.
  • 既存の num_init_children に対する max_connection の割合を算出する (瞬間最大値).
  • num_init_children は想定 connection 消費量の倍が推奨されるが, 1.7倍程度 ~ でも問題無いと思われる.

PostgreSQL max_connections

  • Client 接続最大数.
  • Client 単位で memory resource が割り当てられる為, work_mem 等に大きく影響する.
    • Client 最大数 ≒ 最大想定 memory 使用量.
  • max_connection は max_pool * num_init_children[ * 2] <= (max_connections - superuser_reserved_connections)` が推奨
    • `num_init_children の倍でも問題無さそう
  • 今の上記で算出した割合でそのまま num_init_children, max_connection を増やし倍に達さなくとも, 実績値ベースで問題無ければそれで良い.

最大消費 memory の算出

  • max_connections が増える分, client 単位で memory を消費する為, 最大消費 memory 数の机上計算が必要.
    • worm_mem * max_connections
  • work_mem の適正 size を見積もり, work_mem としても値を大きく出来る余裕があるかも確認しておくと良さそう.
    • (server memory size - shared_buffer) / max_connections