データベースPostrageSQL-サーバーのシャットダウン

18.5。サーバーをシャットダウンする

データベースサーバーをシャットダウンするには、いくつかの方法があります。postgresプロセスに異なるシグナルを送信することにより、シャットダウンのタイプを制御できます。

SIGTERM
これはスマートシャットダウンモードです。SIGTERMを受信した後、サーバーは新しい接続を許可しませんが、既存のセッションが正常に作業を終了できるようにします。すべてのセッションが終了したときにのみ閉じます。サーバーがオンラインバックアップモードの場合、オンラインバックアップモードがアクティブでなくなるまで待機します。オンラインバックアップモードがアクティブ化されても、新しい接続は引き続き許可されますが、スーパーユーザー接続のみが許可されます(この例外により、スーパーユーザー接続はオンラインバックアップモードを終了できます)。

サーバーが回復中にインテリジェントなシャットダウンを要求した場合、回復とストリーミングレプリケーションは、すべての通常のセッションが終了した後にのみ停止します。

SIGINT
これはクイックシャットダウンモードです。サーバーは新しい接続を許可しなくなり、SIGTERMを既存のすべてのサーバープロセスに送信して、現在のトランザクションを中断してすぐに終了できるようにします。サーバーは、すべてのサーバープロセスが終了するのを待って、最終的にシャットダウンします。サービスがオンラインバックアップモードの場合、バックアップモードは終了し、バックアップは使用できなくなります。

SIGQUIT
これは即時シャットダウンモードです。サーバーはSIGQUITをすべての子プロセスに送信し、それらが終了するのを待ちます。5秒以内に終了しないプロセスがあると、SIGKILLが送信されます。メインサーバープロセスは、すべての子プロセスが終了した直後に終了します。通常のデータベースシャットダウン処理は必要ありません。これにより、次回の起動時に(WALログを再生することにより)回復します。この方法は緊急時にのみ推奨されます。

pg_ctlプログラムは、これらの信号を送信してサーバーをシャットダウンするための便利なインターフェースを提供します。さらに、killを使用して、Windows以外のシステムでこれらの信号を直接送信できます。psプログラムを使用するか、データディレクトリのpostmaster.pidファイルからpostgresプロセスのPIDを見つけることができます。たとえば、クイックシャットダウンを実行するには:

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

SIGKILLを使用してサーバーをシャットダウンしないことをお勧めします。これを行うと、サーバーが共有メモリとセマフォを解放できなくなるため、新しいサーバーを起動する前に、これらの解放を手動で完了する必要がある場合があります。さらに、SIGKILLを使用してpostgresプロセスを強制終了する場合、postgresはシグナルをその子プロセスに伝播する機会がないため、個々の子プロセスを手動で強制終了する必要があります。

他のセッションの継続を許可しながら単一のセッションを終了するには、pg_terminate_backend()(表9.78を参照)を使用するか、セッションに関連付けられた子プロセスにSIGTERMシグナルを送信します。

おすすめ

転載: blog.csdn.net/weixin_42528266/article/details/108593574