PostgreSQL/解析

Postmasterプロセスの処理

以下は、PostmasterMain関数postmaster/postmaster.c)の処理概要である。

  1. PostmasterContextの生成&メモリコンテキストのスイッチ
  2. シグナルの設定
  3. GUCオプションの初期化
  4. コマンドラインオプション解析
  5. 設定ファイルの読み込み
    1. postgresql.conf
    2. postgresql.auto.conf
    3. pg_hba.conf
    4. pg_ident.conf
  6. -C <gucname>指定があれば出力して終了
    • Ex: postgres -C work_mem
  7. Data directoryの検証
  8. WorkingDirectoryの変更( chdir(DataDir)
  9. GUCオプションの組み合わせのチェック、以下であること
    • superuser_reserved_connection < max_connections
    • max_wal_senders < max_connections
    • archive_modeが有効時、wal_level != minimal
    • max_wal_senders > 0 && wal_level != minimal
  10. Date token tableのチェック(文字列長、順序)
  11. Lockfile(postmaster.pid)の作成、以下が記録される
    1. Postmaster pid
    2. Date directory path
    3. MyStartTime(起動時刻)
    4. Port番号
    5. Unix socket directory
    6. First listen_address
    7. Shared memory key
    8. Postmaster status(starting / stopping / ready / standby)
  12. SSL有効の場合、SSLライブラリの初期化
  13. Logical replication launcherの登録(バックグラウンドワーカ)
  14. shared_preload_librariesのプレロード
  15. バックエンドプロセス数の初期値設定
    • max_connections + autovacuum_max_workers + 1 + max_worker_processes
  16. Serverソケット作成
  17. Unixドメインソケット作成
  18. 共有メモリとセマフォのセットアップ
  19. File Descriptor数の利用可能な最大値を計算
    • 関連パラメータmax_files_per_process
    • 最大数 = Min(利用可能なFD数, max_files_per_process - オープン済FD数) - NUM_RESERVED_FDS(予約FD数))
  20. スタック深さチェックで使用するベースとなるポインタをセット
    • 深い再帰となる関数呼び出しでスタック深さのチェックが行われる
    • 関連パラメータmax_stack_depth
  21. postmaster監視用のpipeを初期化
  22. postmaster.optsファイルの作成
    • ファイルには実行ファイルのパスが書き込まれる。ex: /path/to/postgres
  23. external_pid_file指定があれば、postmasterのプロセスIDを書き込む
  24. 一時ファイルを削除
    • base/pgsql_tmp、一時テーブル
  25. スタンバイ昇格リクエストのシグナルファイルを削除
    • promote
    • fallback_promote
  26. ログのメタファイルを削除
  27. 統計情報コレクタプロセスの初期化
  28. 自動バキュームの設定チェック
    • パラメータ設定のミスがあればwarningが表示される
    • autovacuum = onの場合、track_counts = onであること
  29. pg_hba.confのロード
  30. pg_ident.confのロード
  31. マルチスレッドが否かのチェック、マルチスレッドでpostmasterが実行されているとFATALで終了する
  32. postmasterの起動タイムスタンプを保存
  33. ロックファイル(postmaster.pid)にpostmasterのステータスstartingを書き込む
  34. StartupProcessの起動
  35. StartupStatusをSTARTUP_RUNNINGにする
    • STARTUP_NOT_RUNNING --> STARTUP_RUNNING
  36. postmasterのステータスをPM_STARTUPにする
  37. 起動すべきバックグラウンドワーカがあれば起動
  38. ServerLoop()の呼び出し

参考リンク


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
目次
ダブルクリックで閉じるTOP | 閉じる
GO TO TOP