サーバのシャットダウン

PostgreSQL 8.4.1文書
前のページ | 巻戻し | 第 17章サーバ設定と操作 | 早送り | 次のページ

# 17.5. サーバのシャットダウン

データベースサーバをシャットダウンする方法は複数あります。 マスター`postgres`プロセスに異なるシグナルを送ることで、シャットダウンの方法を制御します。

SIGTERM

  これはスマートシャットダウンモードです。SIGTERMを受け取った後で、サーバは新しい接続を禁止しますが、既に存在するセッションは通常通り動作させます。 全てのセッションが通常に終了するまではシャットダウンしません。サーバがオンラインバックアップモードである場合、オンラインバックアップモードが活動しなくなるまでさらに待ちます。バックアップモードが活動している間、新規接続は依然として許可されますが、スーパユーザに対してだけです（この例外はスーパユーザがオンラインバックアップモード停止のための接続を許可します）。

SIGINT

  これは高速シャットダウンモードです。サーバは新しい接続を禁止し全ての存在するサーバプロセスにSIGTERMを送り、この結果サーバプロセスは現在のトランザクションをアボートし、即座に終了します。 そして サーバはサーバプロセスの終了を待って、最後にシャットダウンします。 サーバがオンラインバックアップモードである場合、バックアップモードは終了しますので、そのバックアップは使用することができなくなります。

SIGQUIT

  これは即時シャットダウンです。マスター`postgres`プロセスは、全ての子プロセスに SIGQUITを送り、自らを正しくシャットダウンせず、即座に終了します。 子プロセスは同様にSIGQUITを受け取ると即座に終了します。 これは次の起動時に（WALログを再実行することで）リカバリをすることになります。 これは緊急の時にのみ使うことを勧めます。

`pg_ctl`プログラムは、サーバをシャットダウンさせるシグナルを送信するための便利なインタフェースを提供します。 他にも、Windows以外のシステムでは`kill`を使用して直接シグナルを送信することもできます。 `postgres`プロセスのPIDは、`ps`プログラム、もしくはデータディレクトリの中の`postmaster.pid`ファイルを使用して見つけることができます。 例えば、高速シャットダウンをするためには下記のようになります。

    $ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`

> 重要項目: サーバをシャットダウンするためにSIGKILLを使わない方が良いでしょう。 これによってサーバが共有メモリとセマフォを解放できなくなり、新しくサーバを開始する前に、手動でその作業をしなければならなくなる可能性があります。 さらに、SIGKILLは、子プロセスにシグナルを中継することなく`postgres`を停止させます。 このため、個々の子プロセスを停止させるために、同じ作業を手作業で行わなければならなくなります。

他のセッションを継続させながら個別のセッションを停止するには`pg_terminate_backend()`（表9-55を参照）を使用するか、そのセッションに付帯する子プロセスにSIGTERMシグナルを送ります。

前のページ | ホーム | 次のページ
カーネルリソースの管理 | 上に戻る | サーバのなりすまし防止