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

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

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

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

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

共用メモリ量

共有メモリは、“PostgreSQL文書”の“サーバの管理”の“共有メモリとセマフォ”を参照してください。

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

パラメータ名

設定されている値

shared_buffers

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

max_connections

100が設定されています。

max_prepared_transactions

100が設定されています。

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

ローカルメモリ量

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

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

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

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

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

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

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

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

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

プロセス毎に消費される基礎メモリ
プロセス毎に消費される基礎メモリ
  =  3メガバイト × (max_connections + autovacuum_max_workers + 9)

サーバプロセスが動作している間は常に消費されます。
“9”は、様々なサーバ側にある特定の役割を担うプロセスの数です。

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

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

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