無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

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-59 を参照)を使用するか、そのセッションに関連する子プロセスに SIGTERM シグナルを送ります。


powered by SEO.CUG.NET