OSS-DB Gold のナレッジマップ
OSS-DB Gold の主要概念 54 件と、そのつながり。上のマップでノードをクリックすると関連用語や前提をたどれます。下は全概念の索引で、定義と「前提・関連する概念」への内部リンクを掲載しています。
概念一覧(54)
CLUSTER
指定したインデックスの物理順に合わせてテーブルの行を並べ替えて再格納する SQL コマンド。範囲検索の局所性(correlation)を高め I/O を減らせるが、実行中はテーブルへの排他ロックがかかり、以後の追加行は自動的にはクラスタ順を維持しない。
前提: correlation(統計)
PostgreSQL のプロセス構成(postmaster/backend/background)
PostgreSQL のプロセスアーキテクチャ。postmaster は最初に起動する親プロセスで接続受付とプロセス管理を担う。backend は各クライアント接続ごとに fork される子プロセス。background プロセス(autovacuum launcher、WAL writer、checkpointer 等)はサーバ全体で共有される補助処理を担う。
walsender
プライマリ側でストリーミングレプリケーションの送信を担うバックエンドプロセス。接続してきた各スタンバイ(またはpg_receivewal等のクライアント)ごとに1プロセス起動し、WAL を継続的に送信する。同時接続数の上限は max_wal_senders で制御する。
前提: pg_receivewal、PostgreSQL のプロセス構成(postmaster/backend/background)
CHECKPOINT
ダーティページを即座にディスクへ書き出し、WAL の再生開始点を進めるSQLコマンド。定期的に自動実行されるチェックポイントを手動で即時実行したい場合(バックアップ前など)に使う。頻発させるとI/O負荷が急増する。
PITR(ポイントインタイムリカバリ)
ベースバックアップとその後の WAL アーカイブを組み合わせて、任意の過去時点までデータベースを復元する仕組み。誤操作や障害の直前まで戻すといった柔軟な復旧を可能にする。
auto_explain
実行時間があらかじめ設定したしきい値(log_min_duration)を超えたクエリの実行計画を自動的にログへ出力する拡張。個々のクエリに EXPLAIN を付け直さなくても、本番環境で発生した遅いクエリの計画を事後に確認できる。shared_preload_libraries への登録が必要。
pg_basebackup
稼働中のクラスタから物理的なベースバックアップを取得するツール。ストリーミングレプリケーション接続を使い、レプリケーション用スタンバイの初期構築や PITR の起点取得に使う。裏側で非排他的バックアップの仕組みを利用する。
correlation(統計)
カラムの値の並び順と物理的な格納順との相関を -1〜1 で表す統計値。1に近いほど物理順とソート順が一致し、Index Scan がディスク上でも順序よく読めるため有利になる(プランナがスキャン方式を選ぶ材料の一つ)。
メモリ関連パラメータ(shared_buffers/huge_pages/work_mem/maintenance_work_mem)
メモリ関連の主要性能パラメータ。shared_buffers は共有バッファ(データキャッシュ)の大きさ、huge_pages はOSの大ページ機能利用有無、work_mem はソートやハッシュ結合など1操作あたりの作業用メモリ量(外部マージ発生を左右)、maintenance_work_mem は VACUUM や CREATE INDEX 等の保守作業に使うメモリ量を制御する。
ストリーミングレプリケーションのエラーハンドリング
walreceiver と walsender の接続が切れた場合の基本挙動は設定次第で自動再接続を試みること。ネットワーク断など一過性の要因なら再接続で復旧するが、スタンバイの遅延が wal_keep_size 等の保持範囲を超えてWALが欠落している場合は再接続だけでは復旧できず、ベースバックアップの取り直しが必要になる。
前提: WAL・チェックポイント関連パラメータ(fsync/checkpoint_timeout/max_wal_size/wal_keep_size/checkpoint_completion_target)、walreceiver、walsender
WAL・チェックポイント関連パラメータ(fsync/checkpoint_timeout/max_wal_size/wal_keep_size/checkpoint_completion_target)
WAL・チェックポイント関連の性能パラメータ。fsync はディスクへの実書き込み保証の有無(offはクラッシュ時のデータ損失リスク)。checkpoint_timeout は自動チェックポイントの最大間隔。max_wal_size はチェックポイント間に許容するWAL増加量の目安上限。wal_keep_size はスタンバイのために保持しておくWALの最小量。checkpoint_completion_target はチェックポイントの書き込みをどれだけの期間に分散させるかの目標割合。
前提: CHECKPOINT
walreceiver
スタンバイ側でストリーミングレプリケーションの受信を担うプロセス。プライマリの walsender と接続し、受信した WAL をローカルの WAL へ書き込んで適用ワーカーに反映させる。接続が切れると設定に応じて自動的に再接続を試みる。
前提: walsender
pg_resetwal
破損などで起動不能になったデータベースクラスタの WAL やその他の制御情報をリセットして強制的に起動可能にするユーティリティ。データ損失を伴いうる最終手段であり、通常運用では使わない。
前提: CLUSTER
ログ出力しきい値パラメータ(log_min_duration_statement/log_autovacuum_min_duration/log_lock_waits/log_checkpoints/log_temp_files)
ログへ何を記録するかを制御する監視系パラメータ群。log_min_duration_statement は指定時間を超えた遅いクエリを記録、log_autovacuum_min_duration は時間のかかったautovacuum実行を記録、log_lock_waits はロック待ちが deadlock_timeout を超えたら記録、log_checkpoints はチェックポイント発生情報を記録、log_temp_files は一時ファイル使用をログへ記録する。
max_parallel_workers
クラスタ全体でパラレルクエリに使えるワーカープロセスの総数上限を定めるパラメータ。個々のクエリが使える並列度の上限は max_parallel_workers_per_gather で別途制限される。
前提: CLUSTER、パラレルクエリ(max_worker_processes/max_parallel_workers_per_gather)
非排他的バックアップ
バックアップラベルがサーバの共有メモリで管理されるため、pg_backup_start()/pg_backup_stop()(PostgreSQL 15 より前は pg_start_backup()/pg_stop_backup())を呼び出したセッションがクラッシュしても安全に扱える方式。PostgreSQL 9.6 で導入され、排他的バックアップは 15 で削除されたため現在はこの方式のみ。
pg_stat_bgwriter
バックグラウンドライタの活動をサーバ全体で集計する統計ビュー(1行のみ)。PostgreSQL 17 以降はチェックポイント関連の統計(チェックポイント回数・所要時間等)とバックエンドプロセスが書き出したブロック数(buffers_backend)が新設の pg_stat_checkpointer へ分離されたため、pg_stat_bgwriter は buffers_clean(バックグラウンドライタが書き出したブロック数)・maxwritten_clean・buffers_alloc のみを保持する。PG16以前はチェックポイント統計も本ビューに含まれていた。
前提: CHECKPOINT、PostgreSQL のプロセス構成(postmaster/backend/background)
pg_stats
pg_statistic を人間が読みやすい形に整形したビュー。null_frac(NULL の割合)・n_distinct(異なる値の推定数)・most_common_vals(頻出値)・histogram_bounds(分布のヒストグラム境界)・correlation(物理順序との相関)などの列を持ち、実行計画がなぜ選ばれたかの調査で確認する対象。
前提: correlation(統計)
関連: プランナ分布統計(most_common_vals/most_common_freqs/histogram_bounds)、null_frac / n_distinct、pg_statistic
ストリーミングレプリケーション構成パラメータ(wal_level/max_wal_senders/synchronous_standby_names/synchronous_commit/hot_standby_feedback)
ストリーミングレプリケーションを構築する主要パラメータ。wal_level=replica 以上でレプリケーションに必要なWAL量を出力、max_wal_senders は同時に接続できるwalsender数の上限、synchronous_standby_names は同期レプリケーションの対象スタンバイ指定、synchronous_commit はコミット確定に必要な同期範囲、hot_standby_feedback はスタンバイの問い合わせがマスタ側のVACUUMを妨げないよう調整する。
前提: synchronous_commit、wal_level
関連: walsender
synchronous_commit
クライアントへコミット完了を返す前にどこまでWALの永続化を待つかを制御するパラメータ。on(既定)ではローカルディスクへのfsyncに加え、同期スタンバイ設定時はスタンバイ側でWALがフラッシュ(fsync)されるまで待機する(remote_write はスタンバイのOSへの書き込みまで、remote_apply は適用まで、と待機点が変わる)。off にすると性能は上がるがクラッシュ時に直近コミットが失われうる。
監査ログと稼働統計の設定(log_statement/track_functions/track_activities)
監査ログの中核は log_statement で、どのSQL文をログへ記録するか(none/ddl/mod/all)を制御する。一方 track_functions(関数呼び出し統計の収集)と track_activities(pg_stat_activity へ現在実行中クエリを記録するか)は厳密には監査ログ機能ではなく稼働統計・監視のための設定であり、log_statement とは区別して理解する。
クラスタ内ディレクトリ(pg_tblspc/pg_wal/pg_stat_tmp)
データディレクトリ配下の主要ディレクトリ。pg_tblspc は各テーブルスペースへのシンボリックリンクを格納、pg_wal(PostgreSQL 10 以降の呼称。旧 pg_xlog)は WAL セグメントファイルを格納する。pg_stat_tmp は統計情報の一時ファイル格納用だったが、PostgreSQL 15 で累積統計が共有メモリ管理へ移行し廃止された(拡張互換のため空ディレクトリが作られることはあるが実際には使用されない)。
前提: CLUSTER
CREATE STATISTICS / pg_statistic_ext
複数列間の相関(論理的に強く結びついた列同士)を捉える拡張統計。CREATE STATISTICS で統計オブジェクトを定義(カタログ pg_statistic_ext に登録)し、ANALYZE 後に実際の統計データが pg_statistic_ext_data へ格納される。単一カラム統計だけでは過小/過大評価しやすい複合WHERE句の選択率推定を改善する。種類は3つあり、ndistinct は列の組み合わせの個別値数、dependencies(functional dependencies)は列間の関数従属性、mcv(most-common-values)は列の組み合わせの頻出値リストをそれぞれ捉える。
前提: correlation(統計)
deadlock_timeout
あるトランザクションがロック待ちになってからデッドロック検出処理を走らせるまでの待ち時間を定めるパラメータ。値を大きくすると検出処理の負荷は減るがデッドロック発覚が遅れ、小さくすると逆になる。
エラーメッセージからの障害特定(FATAL/PANIC/ERROR)
PostgreSQLのログ(log_destinationで設定した出力先)には重大度が付く。下位から DEBUG(開発者向け詳細情報)< LOG(運用上の情報)< NOTICE(利用者への軽い注意喚起)< WARNING(想定外だが処理は継続)< ERROR(当該SQL文を中止しトランザクションをアボート)< FATAL(現在の接続/セッションを切断)< PANIC(全バックエンドプロセスを巻き込んでサーバ全体をリセットし、共有メモリ破損の疑いを回避するため自動再起動を引き起こす最重度)の順に上がる。could not write to file(ディスク書き込み失敗)やout of memory(メモリ枯渇)はOSリソース枯渇の典型的な兆候として現れる。
EXPLAIN / EXPLAIN ANALYZE
プランナが選んだ実行計画を可視化するコマンド。EXPLAIN は計画のみ表示し実際にはクエリを実行しない(見積もり値のみ)。EXPLAIN ANALYZE は実際にクエリを実行し、実測の行数・所要時間も併記するため、見積もり(estimated rows)と実測(actual rows)の乖離から統計の陳腐化などを診断できる。
Index Only Scan
インデックスに含まれる列だけで結果を返し、ヒープ(実テーブル)へのアクセスを省く実行計画上のスキャン方式。クエリで参照する列がすべてインデックスに含まれる(カバリングインデックス)ときに選ばれ得るが、実際に効くかは Visibility Map の状態にも依存する。
関連: Visibility Map
initdb --data-checksums
クラスタ初期化時にデータページへチェックサムを付与するオプション。ストレージ破損によるデータ化けを検出しやすくなるが、有効/無効の切り替えには再初期化(または pg_checksums ツール)が必要。PostgreSQL 17 まではデフォルト無効で有効化には --data-checksums の明示指定が必要だったが、PostgreSQL 18 以降はデフォルトで有効化され、無効化するには --no-data-checksums を指定する。
前提: CLUSTER
結合戦略(Nested Loop / Hash Join / Merge Join)
プランナが選ぶ主要な結合方式。Nested Loop は外側の少数行に対し内側をインデックス等で効率的に探索する方式で小規模結合に有利。Hash Join は等価結合専用で、片方をハッシュテーブル化し総当たりを避ける。Merge Join は両側がソート済み(または安価にソートできる)前提でマージ的に結合する。index/sortedness が選択の主要因になる。
プランナ分布統計(most_common_vals/most_common_freqs/histogram_bounds)
pg_stats の分布統計。most_common_vals(MCV)は頻出値のリスト、most_common_freqs はそれぞれの出現頻度。histogram_bounds は MCV に含まれない値の分布を表す等頻度ヒストグラムの境界値で、範囲述語(WHERE col > 定数)の選択率推定に使われる。
関連: pg_stats
null_frac / n_distinct
pg_stats の列統計。null_frac はその列に含まれるNULL値の割合、n_distinct はその列の重複を除いた個別値の推定数(正の値は絶対数、負の値は行数に対する比率の目安)を表す。
関連: pg_stats
パラレルクエリ(max_worker_processes/max_parallel_workers_per_gather)
複数プロセスでクエリ処理を分担する仕組み。max_worker_processes はサーバ全体で使えるバックグラウンドワーカー総数の上限、max_parallel_workers_per_gather は1つのクエリが同時に使えるパラレルワーカー数の上限を定める。
pg_cancel_backend()
指定バックエンドの実行中クエリのみをキャンセルする関数(セッション自体は継続する)。セッションごと切断したい場合は pg_terminate_backend() を使う(本節の対比対象)。
pg_receivewal
スタンバイを構築せずにWALストリームだけを継続的に受信・保存する専用ツール。WALアーカイブの代替やニアリアルタイムのWALバックアップに使われる。レプリケーションスロットを使用すると、プライマリ側が未送信のWALを保持し続けるため、一時的な切断があってもWALを欠損なく受信できる。
pg_reload_conf()
再起動不要な設定変更(SIGHUP で反映されるパラメータ)をサーバへ即座に反映させる関数。ただし shared_buffers や max_connections のようにサーバ起動時に確定するパラメータ(PGC_POSTMASTER)は reload では反映されず、サーバの再起動が必要。
前提: メモリ関連パラメータ(shared_buffers/huge_pages/work_mem/maintenance_work_mem)
pg_rewind
旧プライマリを新プライマリのスタンバイとして再構成するツール。昇格後に分岐した部分だけを新プライマリのデータで上書きするため、ベースバックアップを取り直すより高速。旧プライマリと新プライマリを同時稼働させるスプリットブレインを避けるための正しい再統合手順。
関連: スプリットブレイン
pg_stat_activity(wait_event_type/wait_event)
現在接続中の各セッションの状態を可視化する統計ビュー。実行中クエリ・状態(state=active/idle/idle in transaction 等)に加え、待機理由を示す wait_event_type(例:Lock)と、より詳細な wait_event(例:transactionid=他トランザクションの確定待ち)を持つ。
pg_stat_wal_receiver
スタンバイ側で参照するレプリケーション監視ビュー。自身が受信している WAL ストリームの状態(接続先プライマリ・受信済みLSN・接続開始時刻など)を1行で表示し、walreceiver プロセスの状況を確認するのに使う。
前提: walreceiver
pg_statio_all_tables
テーブル単位の物理 I/O 内訳を示す統計ビュー。共有バッファでヒットしたブロック数(heap_blks_hit)とディスクから読み取ったブロック数(heap_blks_read)などをテーブル・インデックス・TOAST別に持ち、バッファヒット率が低いテーブルの特定に使う。
前提: TOAST
プランナ制御パラメータ(enable_*/random_page_cost/hash_mem_multiplier)
プランナの挙動を診断・制御するパラメータ群。enable_*(例:enable_seqscan)は特定のスキャン/結合方式を一時的に無効化してプランナの判断を検証する調査用スイッチ。random_page_cost はランダムI/Oのコスト見積もりでIndex Scanの有利さに影響(SSD環境では下げることが多い)。hash_mem_multiplier はハッシュ系操作に work_mem の何倍までメモリを許すかを制御する。
前提: メモリ関連パラメータ(shared_buffers/huge_pages/work_mem/maintenance_work_mem)
REINDEX
肥大化・破損したインデックスを作り直す SQL コマンド。通常の REINDEX は対象テーブル(または関係するインデックス)に排他ロックをかけてから再構築するため、実行中は該当テーブルへの読み書きがブロックされる。PostgreSQL 12 以降は REINDEX CONCURRENTLY オプションを使うことで排他ロックを避け、読み書きを許可したままオンラインでインデックスを再構築できる(ただし他のDDLは短時間ブロックされ、トランザクションブロック内では実行不可)。この排他ロックの有無はDBMS依存の仕様である。
REINDEX CONCURRENTLY
PostgreSQL 12 以降で使えるインデックス再構築コマンド。通常の REINDEX と異なりテーブルへの排他ロックを取らず、書き込みをブロックせずに無停止でインデックスを再構築できる。ただし途中で失敗すると INVALID 状態のインデックスが残ることがあり、その場合は手動で DROP して作り直す必要がある。
関連: REINDEX
restart_after_crash
バックエンドがクラッシュした際にサーバ全体を自動再起動するかを制御するパラメータ(既定 on)。off にすると異常終了時にサーバは停止したままとなり、原因調査が終わるまで自動復旧させたくない運用向け。
障害切り分けの観点(サーバ停止・データ消失・OSリソース枯渇・プロセス状態分析)
ps で postmaster とバックエンドプロセスの生死を確認し、df/du でディスク使用量、free でメモリを確認するのが障害の一次切り分けの定石。ディスクフルは特にWALの書き込み不能に直結し、最悪クラッシュに至るため最優先で除去すべき原因となる。データ消失が疑われる場合はPostgreSQLログでPGDATA/WALの破損有無を確認し、起動不能なら pg_resetwal による強制復旧や、直近のバックアップからのリストアを検討する。
前提: pg_resetwal、PostgreSQL のプロセス構成(postmaster/backend/background)
スプリットブレイン
ネットワーク分断や旧プライマリの誤った再起動などにより、新旧2つのプライマリが同時に書き込みを受け付けてしまう状態。データの整合性が崩壊するため絶対に避けるべき事故で、フェンシング(STONITH:問題ノードを強制隔離)で二重稼働を防ぎ、収束後は pg_rewind 等で旧プライマリをスタンバイへ正しく再統合する。
関連: pg_rewind
pg_start_backup() / pg_stop_backup()
PITR用のオンラインバックアップを開始・終了する関数(Ver12-14で有効。15で廃止され pg_backup_start()/pg_backup_stop() へ改称)。pg_start_backup() はバックアップ開始をサーバへ通知しチェックポイントを強制、pg_stop_backup() はバックアップ終了を通知しラベルファイルとWALの確定を行う。
wal_level
WALへ書き込む情報量を制御するパラメータ。minimal はWALを最小限に抑え、レプリケーションもWALアーカイブ(PITR/ホットスタンバイ)もサポートしない、replica(既定・旧 archive/hot_standby を統合)はストリーミングレプリケーションとアーカイブに必要な情報を含む、logical はさらにロジカルレプリケーションに必要な追加情報(変更前の行データ等)を含む。
pg_stat_ssl
各バックエンド接続が SSL で暗号化されているか、使用中の暗号方式やプロトコルバージョンなどを確認できる統計ビュー。データそのものの暗号化状況ではなく、通信経路(ワイヤーレベル)の SSL 状態を映す。
pg_stat_statements
クエリ単位(定数部分を正規化したクエリ文字列ごと)の累積実行統計を保持する拡張。呼び出し回数・総/平均実行時間・読み取りブロック数などを集計し、どのクエリが最も負荷をかけているかの特定に使う。shared_preload_libraries への登録が必要で、ビューとして提供される統計は pg_stat_statements_reset() でリセットできる。
TOAST
ページサイズ(既定8KB)を超える大きな列値を自動的に圧縮・分割して別テーブル(TOASTテーブル)へ格納する仕組み(The Oversized-Attribute Storage Technique)。テキストや JSONB など可変長の大きな値を透過的に扱うために使われる。
Visibility Map
各ヒープページについて、そのページの全行がすべてのトランザクションから可視(かつ凍結済み)かどうかを記録するビットマップ。インデックス自体には行の可視性情報が無いため、Index Only Scan はこのマップを参照し、全行可視なページはヒープを読まずに済ませ、そうでないページのみヒープへフォールバックして可視性を確認する。VACUUM で更新される。
関連: Index Only Scan
pg_statistic
プランナが実行計画を選ぶ根拠となる列統計を、内部形式の生データのまま保持するシステムカタログ。ANALYZE 実行で更新され、値は型依存の配列やスカラー等で格納されるため直接読むのは難しく、通常は人間可読なビューの pg_stats を介して参照する。
関連: pg_stats
ignore_system_indexes / ignore_checksum_failure
破損クラスタの緊急起動用トラブルシューティングフラグ。ignore_system_indexes はシステムカタログのインデックスが壊れている場合にそれを無視してシーケンシャルスキャンで代替する。ignore_checksum_failure はデータチェックサム不一致を検出してもエラーで停止せず読み進める(データ破損を許容するリスクの高い設定)。
前提: CLUSTER

