PostgreSQLのパフォチューメモ

提供: Astarisk Works Wiki

目次

パフォーマンスチューニング向上のポイント

  • 共有メモリの調整
  • 共有バッファの調整
  • チェックポイントの調整

テーブル、インデックス、シーケンス、ビューのサイズを求める

次のSQLで各テーブルのサイズが求められる。

SELECT
  relname,
  relkind,
  reltuples as rows,
  pg_relation_size(oid) as bytes
FROM pg_class
WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname='public')
order by relkind, relname

共有メモリの調整

共有メモリに関してはPostgreSQLではなくOSの設定となる。 変更するには/proc/sys/kernel/shmmaxにメモリの容量を設定する。 次の例は64MB(67108864バイト=64×1024×1024)に設定するときの例。

root>echo 67108864 >/proc/sys/kernel/shmmax

ただし、この方法ではサーバの再起動で元の値にリセットされる。 OS起動時に自動的に設定されるようにするには上のコマンド例を/etc/rc.d/rc.sysinitに追加しておく

Ubuntuなら/etc/sysctl.confに次に記述を追記する(128MBにする場合の例)

kernel.shmmax=134217728

ファイルに追記後、すぐに反映させるには次のコマンドを使う

# sysctl -p

共有メモリの使用状況は ipcsコマンドで調べられる

#ipcs -m

------ 共有メモリセグメント --------
キー     shmid      所有者  権限     バイト  nattch     状態      
0x02ca2451 1376256    postgres   600        1002233856 15

共有バッファの調整

共有バッファとはPostgreSQLがテーブルからデータを読み込み処理するために使うバッファ領域である。
共有バッファの数はpostgresql.confのshared_buffersパラメータで設定する。
少なくともmac_connectionsで設定する最大接続数の2倍の数が必要だが、共有バッファが使うメモリ量はOSに設定した共有メモリのサイズを超えてはいけない。
DBが起動しなくなってしまう。

目安としては運用で利用するテーブル群が格納できる容量を設定する。 通常運用でアクセスするテーブルサイズを8192で割った値がshared_buffersに設定する値となる。


チェックポイントの調整

個人用ツール