PostgreSQL 9.6.2 문서 | |||
---|---|---|---|
이전 | 위로 | 장 18. 서버 설정 및 운용 | 다음 |
데이터베이스 서버를 셧다운 하는 방법에는 몇 가지가 있다.사용자는 마스터 postgres 프로세스에 서로 다른 신호를 전송하여 셧다운 유형을 제어한다.
이것은 스마트 셧다운 모드이다. SIGTERM을 수신한 후, 서버는 새로운 연결을 불허하지만 기존 세션은 정상적인 종료를 허용한다.모든 세션이 종료된 후에만 셧다운된다.서버가 온라인 백업 모드인 경우 온라인 백업 모드가 더 이상 작동하지 않을 때까지 조금 더 대기한다. 백업 모드가 작동되는 중에는 새로운 연결이 수퍼유저에게만 계속 허용된다(이러한 예외는 온라인 백업 모드를 종료하기 위해 수퍼유저가 연결하는 것을 허용). 서버가 복구 중인 상태에서 스마트 셧다운이 요청되면, 모든 정규 세션이 종료된 후에만 복구 및 streaming replication이 중단된다.
이것은 빠른 셧다운 모드이다. 서버는 새로운 연결을 불허하고 모든 기존 서버 프로세스 SIGTERM을 전송하는데, 이로써 현재 트랜잭션이 중단되고 즉시 종료된다.그런 다음, 모든 서버 프로세스가 종료되도록 기다렸다가 최종적으로 셧다운된다.서버가 온라인 백업 모드인 경우 백업이 무용지물임이 표시되면서 백업 모드가 종료된다.
이것은 즉시 셧다운 모드이다. 서버는 SIGQUIT를 모든 자식 프로세스에 전송하고 자식 프로세스가 종료될 때까지 대기한다. 5초 이내에 종료되지 않는 프로세스에는 마스터 postgres 프로세스가 다시 SIGKILL을 보내 즉시 종료하고, 자신도 정상적인 중지 절차 없이 중지한다. 이렇게 되면 다음 서버 시작 시 복구 작업을 진행한다(WAL 로그 리플레이에 의해). 이것은 비상 시에만 권장된다.
pg_ctl 프로그램은 이러한 서버 셧다운 신호를 전송하기 위한 편리한 인터페이스를 제공한다.또는 Windows가 아닌 시스템에서 kill을 사용하여 직접 신호를 전송할 수 있다.postgres 프로세스의 PID는 ps 프로그램을 사용하여 찾을 수 있거나 데이터 디렉터리에서 postmaster.pid 파일에서 찾을 수 있다.예를 들어, 빠른 셧다운을 하려면 아래와 같은 명령어로 가능하다.
$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`
중요: 서버 셧다운 시 SIGKILL은 사용하지 않는 것이 최선이다.그럴 경우 서버에서 공유 메모리 및 세마포어가 해제되지 않아서, 새 서버를 시작하기 전에 수동으로 해제를 해야 할 수 있다.또한 SIGKILL은 하위 프로세스로 신호를 전달하지 않고 postgres를 kill하므로 각각의 하위 프로세스 역시 직접 kill해야 한다.
다른 세션은 계속하면서 개별 세션을 종료하려면 pg_terminate_backend()
를 사용하거나(표 9-77 참조) 세션과 관련된 자식 프로세스에 SIGTERM 신호를 전송해야 한다.