Postgres 勉強メモ
- 構造1-ファイル群-
<PGDATA> -PG_VERSION …PostgreSQLのバージョンを示したファイル -base …各データベースのデータ本体用のディレクトリ -global …データベースクラスタ共通用のディレクトリ -pg_clog …コミットログ格納用のディレクトリ -pg_hba.conf …HostBase認証用の設定ファイル -pg_ident.conf …ident認証用の設定ファイル -pg_log …サーバログファイル格納用ディレクトリ -pg_multixact …マルチトランザクション管理用ディレクトリ -pg_notify …Listen/Notifyコマンド用ディレクトリ -pg_serial …シリアル型の管理用ディレクトリ -pg_stat_tmp …統計情報の一時ファイル用ディレクトリ -pg_subtrans …サブトランザクション用ディレクトリ -pg_tblspc …テーブルスペースに関するデータ -pg_twophase …2相コミット利用時のデータ -pg_xlog …トランザクションログ -postgresql.conf …PostgreSQLの設定ファイル -postmaster.pid …現在のpostmasterのプロセスID等を記述したファイル -postmaster.opts …PostgreSQLの起動オプションを示したファイル
構造2 -メモリ群 -
- shared_buffers(共有メモリ) -> データの読込み、書込みに使用されるメモリ領域。 - wal_buffers(WALバッファ) -> WALログの書込みに使用されるメモリ領域。 - work_memory(作業領域) -> ソート処理、ハッシュ作成処理、結合に使われるメモリ領域 で、実行プロセス毎に確保される。 - maintenance_work_memory(メンテナンス領域) -> VACUUMやインデックス作成に使われるメモリ領域で、実 行プロセス毎に確保される。
構造3 -プロセス-
- postmaster(リスナプロセス) クライアントからの接続を受付け、認証処理を行う。 起動時にサーバプロセス以外の各プロセスを生成する(fork)。 認証されたクライアントに対して、postgresプロセスを生成し(fork)、 処理を引き渡す。 - postgres(サーバプロセス) 個々のクライアントの要求を処理するプロセス。 - writer(バックグラウンドライタ) 共有バッファのデータをテーブルファイル、インデックスファイルに書 込む。 - wal_writer(WALライタ) WALバッファのデータをトランザクションログファイルに書込む。 - archiver(WALアーカイバ) WALログファイルをPITRのためにアーカイバに移動する。 - checkpointer(チェックポインタ) 全てのダーティページをデータファイルに書出す。
各種設定方法
- postgresql.conf -> Postgresqlのパラメータ設定
- pg_hba.conf -> クライアント認証関連の設定
接続と認証
クライアント接続デフォルト
- search_path -> スキーマ検索パスの設定
- default_transaction_isolation -> トランザクション分離レベルのデフォルトの設定
- client_encoding -> クライアントエンコーディング
パフォーマンスチューニング関連の設定
- shared_buffers -> 共有メモリの使用するメモリ量
- work_mem -> 内部そーと、ハッシュテーブル操作で使用するメモリ量 *maintenance_work_mem -> VACUUM等の保守操作で使用するメモリ量
- bgwriter_delay -> バックグラウンドライタの動作周期
運用管理
運用管理にはデータベースの追加・削除・変更、 データベースの各種情報取得、テーブル単位の権 限の付与・取消など色々あるが、PostgreSQL独特であるVACUUM(+ANALYZE)について注視する。 ####なぜvacuumが必要か? -> PostgreSQLのデータ管理が追記型だか ら、不要領域を回収する必要があるため。
ファイル追記型にはメリットもあるが、何もしな いとファイルサイズが肥大化し続けてしまうため、 不要領域のメンテナンスが必要 ⇒運用管理としてVACUUMが必要
pg_dumpによるバックアップ
###バックアップコマンド *pg_dumpコマンド - データベースを指定してバックアップする。 *pg_dumpall - 全てのデータベース、データベースクラスタ全体をバック アップする。 ###リストアコマンド *テキスト形式の場合 - psqlコマンド *バイナリ形式の場合 - pg_restoreコマンド
他にも osコマンドとPITRによるバックアップが可能なので今度勉強する
実行計画の取得
* SQL文を実際に実行せずに、推測で取得する方法 - SQL文の前に、「EXPLAIN」を付与 * SQL文を実際に実行して、実行結果の情報も併せて取得する方法 - SQL文の前に、「EXPLAIN ANALYSE」を付与 - INSERT、UPDATE、DELETE等を実行すると実データに影響を与えるため注意