PostgreSQL 設計・運用計画の鉄則

最終更新日

勝又智成、佐伯昌樹、原田登志

基本編

PostgreSQLは実用レベルで使えるデータベース。リレーショナルデータベースとオブジェクトデータベースの双方の能力を兼ね備えた「オブジェクトリレーショナルデータベース」に分類される。

歴史は2005年から。

マイナーバージョンは極力アップデートして最新化する。
〇〇.◇
→ 〇:メジャーバージョン番号, ◇:マイナーバージョン番号

PostgreSQLの構成要素を把握し、設計・運用計画に活かす。

アーキテクチャの基本

プロセス構成
マスタサーバープロセス, ライタプロセス, WALライタプロセス, チェックポインタプロセス, 自動バキュームランチャと自動バキュームワーカープロセス, 統計情報コレクタプロセス, バックエンドプロセス, パラレルワーカプロセス

メモリ管理
共有メモリ域, 共有バッファ, WALバッファ, 空き領域マップ, 可視性マップ

プロセスメモリ
作業メモリ, メンテナンス用作業メモリ, 一次バッファ

主なディレクトリ
base, global, pg_wal, pg_xact, pg_tblspc

主なファイル
テーブルファイル, インデックスファイル, TOASTファイル, Free Space Map ファイル, Visibility Mapファイル, WALファイル, postmaster.pidls

各種設定ファイルと基本設定

PostgreSQLはデフォルト設定ではなく、実際のシステムで使う場合には、要件に合わせて適切に設定すること。システムのセキュリティ要件に合わせて、適切な接続認証を行うこと。

設定ファイル

ファイル名説明
postgresql.confPostgreSQL全体の動作を制御する
pg_hba.confクライアントからの接続を制御する
pg_ident.confident認証及びGSSAPI認証で使用される
recovery.confアーカイブリカバリ用の設定ファイル
pg_service.conflibpqライブラリの接続情報をサービスとしてまとめて管理する。

設定項目と設定値はSHOW文で確認できる。

コマンドラインで設定値を変更できるが、保存されない。
極力postgresql.confで設定するようにする。
設定ファイル自体もバージョン管理やバックアップをするようにする。

pg_hba.confファイル
クライアントからPostgreSQLへの接続と認証に関する設定を記述。

pg_ident.confファイル
外部の認証システムを利用する場合に使用させる、データベースクラスタ配下のユーザー名マップ設定ファイルです。

処理/制御の基本

SQL実行時に自動的に設定されるロック種別を設計/運用に活かす。
必要に応じてトランザクションの分離レベルを分ける。

クライアントとサーバの接続/通信

問い合わせの実行の流れ

パーサー
・字句解析:SQL文をトークンに分解
・構文解析:分解した字句の並びが記述規則に合っているかを検査

リライタ:問い合わせツリーの修正

プランナ/オプティマイザ:問い合わせツリーをもとに最適な実行計画を生成

エグゼキューター:プランナで決定された実行計画に従って必要な行の集合を抽出する。

トランザクション

  • 原子性(atomicity)
  • 一貫性(consistency)
  • 独立性(isolation)
  • 永続性(durability)

トランザクションの分離レベル
分離が弱い場合、ダーティーリード、反復不能読み取り、ファントムリードなどの影響が発生し、意図しない結果になることがある。

トランザクション分離レベル

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

分離レベルが不十分な場合の挙動

  • ダーティーリード(コミット前のデータを読み込む)
  • 反復不能読み取り(同一トランザクションで2回目の読み込み時に別トランザクションで更新とコミットがされた場合、値が変化する)
  • ファントムリード(同一トランザクションで2回目の読み込み時に別トランザクションで挿入とコミットがされた場合、検索結果が変化する

設計/計画編

運用編

高可用性と不可分散

オンライン物理バックアップ

死活監視と正常動作の監視

テーブルメンテナンス

インデックスメンテナンス

チューニング編

実行計画の取得/解析

パフォーマンスチューニング

ryuichi