PostgreSQL 8.4 (目次)



インストール環境

  • OS
    • CentOS 5.4 (kernel 2.6.18-164.11.1.el5)
  • パッケージ
    • postgresql-server-8.4.2-1PGDG.rhel5
    • postgresql-libs-8.4.2-1PGDG.rhel5
    • postgresql-8.4.2-1PGDG.rhel5
    • compat-postgresql-libs-4-1PGDG.rhel5

インストール

  • postgresql8.4を利用するためリポジトリを追加します。
    # rpm -ivh http://yum.pgsqlrpms.org/reporpms/8.4/pgdg-centos-8.4-2.noarch.rpm
  • postgresql-serversのインストール
    # yum install postgresql-server

データベースクラスタの初期化

  • データベースクラスタの初期化を行います。
    # su - postgres
    $ initdb --encoding=UTF-8 --no-locale -D /var/lib/pgsql/data/
    • --no-locale
      ロケールを無効にするオプションです。
      ロケールとは、言語や文化に応じた処理をするOSの機構で、
      PostgreSQLでは主にデータのソート処理に使用します。

      英語や日本語のデータを扱う場合には特に必要ありません。
      逆に有効にするとロケール処理の分、ソート処理などが遅くなります。


    • -D
      データベースの保存場所を指定します。

PostgreSQLの設定

postgresql.confの編集

  • パラメータ設定ファイル「postgresql.conf」を編集します。
    # vi /var/lib/pgsql/data/postgresql.conf
    
    listen_addresses = '*'
    max_connections = 100 
    
    shared_buffers = 64MB 
    wal_buffers = 2MB                     
    work_mem = 4MB
    checkpoint_segments = 16
    
    # PITR関連の設定
    archive_mode = on 
    archive_command = 'cp "%p" /var/lib/pgsql/archive/"%f"'
    
    
    # ログ関連の設定
    log_destination = 'syslog' 
    log_min_error_statement = error 
    
    # 統計情報関連の設定
    track_activities = on
    track_counts = on
    
    # autovacuum関連の設定
    autovacuum = on 
     
    設定項目説明
    listen_addressespostmasterがクライアントアプリケーションからの接続を監視するTCP/IPホスト名かアドレスを設定します。
    max_connectionsデータベースサーバーへの同時接続の最大数を設定します。
    shared_buffersデータベースサーバで使用される共有メモリバッファのページ数を設定します。
    wal_buffersWALデータ用に共有メモリ内で使用されるメモリ量を設定します。
    work_memプランナが問い合わせ実行計画を作成するときに使う、マージソート結合とハッシュ結合のためのメモリ量を指定します。
    checkpoint_segmentsチェックポイントの間隔をセグメントファイル数で設定します。
    トランザクションログがここに指定したセグメントファイル数に達した場合、チェックポイントを発生させます。1セグメントは16Mバイト。
    log_destinationstderr (標準エラー出力), syslog, csvlogを選択します。複数選択も可能。
    log_min_error_statementデフォルトのERRORを設定した場合は、エラー、ログメッセージ、致命的エラー、パニックを引き起こした文がログに記録されます。
    track_activitiesサーバーで実行されているコマンドとその実行開始時刻を収集するか否かを設定します。
    track_countsパフォーマンス統計情報を収集するか否かを設定します。
    この値をoffにすると、自動バキューム機能が正常に動作しなくなります。
    autovacuumVACUUMEおよびANALYZEを自動で実行するか否かを設定します。

pg_hba.confの編集

  • 次にホスト認証設定ファイル「pg_hba.conf」を編集します。
    今回は、LAN(192.168.11.0/24 )からは認証により全データベースにアクセス可能にします。
    # vi /var/lib/pgsql/data/pg_hba.conf
    
    # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
    host    all         all         192.168.11.0/24       password

ログの設定

postgresql.confの確認

  • ログをsyslogへ出力する設定を確認します。
    # vi /var/lib/pgsql/data/postgresql.conf
    
    log_destination = 'syslog' 
    log_min_error_statement = error 

syslogの設定

  • ログを保存するためのディレクトリを作成します。
    # mkdir  /var/log/postgres
  • ログの出力先を設定します。
    # vi /etc/syslog.conf
    local0.*                        /var/log/postgres/postgres.log
  • syslogのログローテートにpostgres.logを追加します。
    # vi /etc/logrotate.d/syslog
    /var/log/messages /var/log/secure /var/log/maillog 
    /var/log/spooler /var/log/boot.log /var/log/cron /var/log/postgres/postgres.log {
  • syslogを再起動します。
    # /etc/init.d/syslog restart

自動起動の設定

  • chkconfigコマンドで自動起動をONにします
    # chkconfig postgresql on

  • chkconfigコマンドで自動起動の確認をします。 LUNレベル3,4,5がonになっていれば問題ありません。
    # chkconfig --list postgresql
    postgresql         0:off   1:off   2:on    3:on    4:on    5:on    6:off
  • PostgreSQLを起動します。
    # /etc/init.d/postgresql start

  • psコマンドで起動の確認を行います。
    # ps ax |grep post
    12846 ?        S      0:00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
    12848 ?        Ss     0:00 postgres: logger process
    12850 ?        Ss     0:00 postgres: writer process
    12851 ?        Ss     0:00 postgres: wal writer process
    12852 ?        Ss     0:00 postgres: autovacuum launcher process
    12853 ?        Ss     0:00 postgres: archiver process
    12854 ?        Ss     0:00 postgres: stats collector process
    プロセス名説明
    postmasterDBMSデーモン
    logger processサーバログ
    writer processバックグラウンドライタ
    wal writer processWAL ライタ
    archiver processアーカイブログ管理
    autovacuum launcher process自動バキューム
    stats collector process統計情報

バックアップ

バックアップ方法

  • PostgreSQLのバックアップ手段は主に3通りあります。
    • PostgreSQLのPITR(Point In Time Recovery)機能を利用する
    • PostgreSQLのダンプツール(pg_dump)を利用する
    • OSコマンド(dump,cp,tar)を利用する

  • 各手段の特徴は下記のようになります。
    PITRpg_dumpOSコマンド(cp,tarなど)
    大規模データベースへの対応*1××
    オンラインバックアップ×
    リストア後の状態任意の時点バックアップ時点バックアップ時点
    メジャーバージョンアップへの利用××

PITRでのバックアップ・リストア

pg_dumpでのバックアップ・リストア

PostgreSQL/pg_dump

OSコマンドでのバックアップ・リストア

  • データベースを停止してバックアップする事はほとんど無いと思われるため省略します。

チューニング

「postgresql.conf」によるチューニングを紹介します。

同時接続数

  • max_connections
    データベースへの最大同時接続数を設定します。同時接続数の多い場合は設定を見直す必要があります。


メモリ関連

  • shared_buffers
    データベースエンジンが利用する共有メモリのサイズ。 設定を増やせば、キャッシュによる高速化が可能ですが、 8000~10000以上を指定するとバッファ管理のオーバーヘッドにより逆に性能が低下するようです。
    設定可能な最大値は「/proc/sys/kernel/shmmax」の値になります。
  • work_mem
    セッションがソート処理およびテーブル結合などに使用するメモリサイズ。 最大量をKByte単位で設定します。
  • effective_cache_size
    オプティマイザが利用するメモリサイズ。
    デフォルトの1000(8K単位のため8M)。
  • wal_buffers
    WALデータ用に共有メモリ内で使用されるメモリサイズ。



autovacuum関連

autovacuumの設定はVACUUMに必要以上の負荷が掛からないよう、 「autovacuum_vacuum_cost_delay」「autovacuum_vacuum_cost_delay」の2パラメータで負荷の上限値を設定します。

  • autovacuum_vacuum_cost_delay
    自動VACUUM機能によるVACUUMにかかったコストがautovacuum_vacuum_cost_limitで指定した制限値に達したときに
    VACUUMを休止する期間をミリ秒単位で指定します。
    この値が-1の場合は、vacuum_cost_delayの値になります。

  • autovacuum_vacuum_cost_limit
    自動VACUUM機能による1回のVACUUM処理による累積のコストがこの値に達したときに、 そのVACUUM処理を停止させる制限値を指定します。
    この値が-1の場合は、vacuum_cost_limitの値になります。

  • autovacuum_vacuum_その他
    下記の設定でVACUUMの起動タイミングを調整できますが、負荷の上限値を設定すれば基本デフォルトでよいと思います。
    設定項目説明
    autovacuum_naptimeautovacuumを起動する間隔を秒単位で指定
    autovacuum_vacuum_thresholdVACUUMを起動するトリガとなる更新行数
    autovacuum_analyze_thresholdANALYZEを起動するトリガとなる更新行数
    autovacuum_vacuum_scale_factorVACUUMを起動するトリガとなる更新行数の割合
    autovacuum_analyze_scale_factorANALYZEを起動するトリガとなる更新行数の割合



*1 バックアップ・リストアの時間を短縮するため、スナップショットやボリューム複製機能を備えたストレージが必要
トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-07-19 (月) 23:38:06 (11d)