PostgreSQLは最適なパフォーマンスが出るように自動的に調整されるため、特別なチューニングテクニックは必須ではありませんが、最大限にパフォーマンスを引き出したい場合にはpostgresql.confで指定している値を調整することによりチューニングが可能です。また、PostgreSQLのパフォーマンス向上のためには定期的にVACUUMコマンドを実行することをお奨めします。
■VACUUMコマンドを実行する
VACUUMコマンドはPostgreSQLデータベースの掃除と解析をおこなうコマンドです。
定期的にVACUUMコマンドを実行するとデータベースの問い合わせのパフォーマンスが向上します。
VACUUMコマンドによる処理はテーブルが大きい場合は時間がかかりますので、あまりアクセスのない時間帯におこなうとよいでしょう。
●VACUUMコマンドの文法
vacuumdb [connection-options...] [[-d] dbname] [--full | -f] [--verbose | -v] [--analyze | -z] [--table 'table [( column [,...] )]']
VACUUMコマンドの実行例
testというデータベースを掃除するには、下記のようにコマンドを実行します。
$ vacuumdb test |
実行後、下記のメッセージが戻ればVACUUM処理が完了しています。
VACUUM |
■共有バッファを増やす場合
共有バッファはデータベースをアクセスする際のキャッシュとして使われます。
PostgreSQLを動かすサーバーの搭載メモリに余裕のあるシステムでは、メモリ内に全てのデータベースを展開するとパフォーマンスが向上します。各バッファは8Kバイトですので「共有バッファ」は次の計算で求められます
「共有バッファ」= ((空きメモリの合計) と (データベースサイズ + 512K) の少ない方)) / 8192
「共有バッファ」を増やす場合はpostgresql.conf内の「shared_buffers」で指定する値を増やします。
例)
shared_buffers = 1024
■PostgreSQLへの接続数を増やす場合
PostgreSQLの同時接続ユーザー数の上限はpostgresql.conf内の「max_connections」で指定します。
同時接続ユーザー数を増やした場合は「同時接続ユーザー数 * 2」以上に共有メモリを増やしてください。
例)
max_connections = 64
■ソートバッファの値を増やす場合
ソート処理はSQLのORDER BYを指定した場合だけでなく、テーブルの結合の際にもおこなわれますので、 ソートバッファを大きくすることでパフォーマンスの向上が期待できます。
ソートバッファの値を増やす場合はpostgresql.conf内の「sort_mem」で指定する値を増やします。
例)
sort_mem = 4096
■キャッシュサイズを増やす場合
キャッシュサイズ値で共有バッファが割り当てられたときに利用できるメモリの量を設定します。
キャッシュサイズを増やす場合はpostgresql.conf内の「effective_cache_size」でキャッシュサイズを指定している値を増やします。
例)
effective_cache_size = 1000
■トランザクションログ
「トランザクションログが無くなっている(running out of transaction logs)」というメッセージが出力される場合はpostgresql.conf内の「al_files」と「wal_ buffers」で指定している値を増やします。
例)
wal_buffers = 8
wal_files = 4