ページの先頭行へ戻る
Enterprise Postgres 14 SP1 導入ガイド(サーバ編)
FUJITSU Software

F.1 FUJITSU Enterprise Postgresで使用するメモリの見積り式

FUJITSU Enterprise Postgresで使用するメモリの見積り式について説明します。

FUJITSU Enterprise Postgresの使用メモリ量の概算は、次の式で見積もってください。

FUJITSU Enterprise Postgresの使用メモリ量 = 共有メモリ量 + ローカルメモリ量

共有メモリ量

共有メモリは、“PostgreSQL Documentation”の“Server Administration”の“Shared Memory and Semaphores”を参照してください。Global Meta Cache機能を有効にする場合は、pgx_global_metacacheの値も加算してください。設定値は、“運用ガイド”の“パラメータ”を参照してください。

ただし、WebAdminを使用してインスタンスを作成している場合は、下記のパラメータがインスタンスの作成時に自動的に設定されていることを考慮して、共有メモリ量を計算してください。

パラメータ名

設定されている値

shared_buffers

マシンの搭載メモリ量の30%が設定されます。(注)

max_connections

100が設定されています。

max_prepared_transactions

100が設定されています。

注) この値が2097151MBを超える場合、2097151MBが設定されます。

ローカルメモリ量

ローカルメモリ量 = プロセスのスタック領域
                  + 一時テーブルを使用するデータベースセッションで消費されるメモリ
                  + ソートやハッシュテーブル操作を行うデータベースセッションで消費されるメモリ
                  + 保守操作で消費されるメモリ
                  + プロセス毎に消費される基礎メモリ
                  + データアクセスの準備のために消費されるメモリ

プロセスのスタック領域
プロセスのスタック領域
  = max_stack_depth × (max_connections + autovacuum_max_workers + 9)

これは上限値です。
実際にスタックが成長するに従って消費されます。
“9”は、様々なサーバ側にある特定の役割を担うプロセスの数です。

一時テーブルを使用するデータベースセッションで消費されるメモリ
一時テーブルを使用するデータベースセッションで消費されるメモリ
  = temp_buffers × max_connections

これは上限値です。
実際に一時バッファを使用するときに徐々にメモリが消費され、セッションが終了されたときに解放されます。

ソートやハッシュテーブル操作を行うデータベースセッションで消費されるメモリ
ソートやハッシュテーブル操作を行うデータベースセッションで消費されるメモリ
  = work_mem (注) × max_connections

注) ハッシュテーブル操作の場合、work_memをhash_mem_multiplierで乗算します。

これは上限値です。
実際にソートなどを行ったときに徐々にメモリが消費され、クエリが終了したときに解放されます。

保守操作で消費されるメモリ
保守操作で消費されるメモリ
  = maintenance_work_mem × (同時に保守操作を行うセッション数 + autovacuum_max_workers)

保守操作とは、VACUUM、CREATE INDEX、およびALTER TABLE ADD FOREIGN KEYのような操作を意味します。

プロセス毎に消費される基礎メモリ
プロセス毎に消費される基礎メモリ
  =  1プロセスで消費される基礎メモリ× (max_connections + autovacuum_max_workers + 9)

1プロセス当たりの消費メモリ量は、以下の計算式の結果を使用してください。サーバプロセスが動作している間は常に消費されます。

“9”は、様々なサーバ側にある特定の役割を担うプロセスの数です。

1プロセス当たりの消費メモリ量は、そのプロセスがアクセスする、テーブル、インデックスや、全テーブルの全カラムなどの数によって決まります。テーブルの数が100程度のシステムならば、3MBと見積もって構いませんが、そうでないならば、以下の見積もり式を使用してください。

1プロセスで消費される基礎メモリ
  = (1.9キロバイト×全ユーザーテーブル個数 + 2.9キロバイト × 全ユーザーインデックス個数 + 1.0キロバイト ×全ユーザーカラム数) × 1.5 (注)

もし、Global Meta Cache機能を有効にした場合は以下の計算式を使ってください。
1プロセスで消費される基礎メモリ
  =  (全ユーザーテーブル個数 + 全ユーザーインデックス個数 + 全ユーザーカラム数) 
     × 0.1キロバイト× 1.5(※)
     + (1.4キロバイト×全ユーザーテーブル個数 + 2.4キロバイト × 全ユーザーインデックス個数) × 1.5 (注)

注) 安全係数(1.5)
基礎メモリにのる情報には、可変長の情報が含まれています。それを考慮した値です。

データアクセスの準備のために消費されるメモリ
データアクセスの準備のために消費されるメモリ
 =変動量 × (max_connections + autovacuum_max_workers + 4)

  変動量 = shared_buffers / 8キロバイト(ページ長) × 4バイト(ページ管理データのサイズ)

共有メモリ上のデータベースキャッシュにアクセスするときに必要とします。
“4”は、様々なサーバ側にある特定の役割を担うプロセスのうち、データベースにアクセスするプロセスの数です。