PostgreSQL 9.3.5 문서 | ||||
---|---|---|---|---|
이전 | 위로 | 장 27. 데이터베이스 성능 모니터링 | 다음 |
대부분의 유닉스 환경에서는 PostgreSQL 서버의 동작 상태를 ps 쉘 명령어만으로도 대략적으로 살펴 볼 수 있다. 왜냐하면 서버는 자신 하고 있는 각각의 하위 프로세스들의 명령어 이름들을 동적으로 바꾸어서 운영체제가 그것을 볼 수 있도록 하기 때문이다. 그래서 다음과 같은 간단한 명령어로 서버 상태를 살펴 볼 수 있다:
$ ps auxww | grep ^postgres postgres 15551 0.0 0.1 57536 7132 pts/0 S 18:02 0:00 postgres -i postgres 15554 0.0 0.0 57536 1184 ? Ss 18:02 0:00 postgres: writer process postgres 15555 0.0 0.0 57536 916 ? Ss 18:02 0:00 postgres: checkpointer process postgres 15556 0.0 0.0 57536 916 ? Ss 18:02 0:00 postgres: wal writer process postgres 15557 0.0 0.0 58504 2244 ? Ss 18:02 0:00 postgres: autovacuum launcher process postgres 15558 0.0 0.0 17512 1068 ? Ss 18:02 0:00 postgres: stats collector process postgres 15582 0.0 0.0 58772 3080 ? Ss 18:04 0:00 postgres: joe runbug 127.0.0.1 idle postgres 15606 0.0 0.0 58772 3052 ? Ss 18:07 0:00 postgres: tgl regression [local] SELECT waiting postgres 15610 0.0 0.0 58772 3056 ? Ss 18:07 0:00 postgres: tgl regression [local] idle in transaction
(이 명령은 여러 유닉스 제각각이다. 윗 예제는 요즘 사용하는 리눅스 시스템에서 사용하는 명령어다. ps 명령의 옵션에 대한 자세한 설명은 사용하고 있는 유닉스 운영체제 설명서를 설펴보는 것이 좋다.) 윗 예제 출력 결과의 첫번째 줄은 데이터베이스 서버의 최상위 프로세스이며, 서버를 실행 할 때 사용했던 옵션들도 함께 보인다. (PostgreSQL 서버는 쓰레드 방식이 아니라, 다중 프로세스 방식으로 운영된다. 다중 프로세스 방식이란, 서버 관리자가 서버 실행 명령어를 OS 쉘에서 실행하면, 서버 최상위 프로세스 실행되고, 그 프로세스를 필요한 여러 프로세스를 실행하는 방식이다. - 옮긴이) 다음 다섯 줄은 이 최상위 프로세스가 실행한 서버 운영에 필요한 하위 프로세스들이다. 이것을 서버 백그라운드 프로세스라고 한다. 이 프로세스들은 윗 예제와 꼭 같지는 않다. "autovacuum launcher" 프로세스는 autovacuum 기능을 사용하지 않으면 보이지 않을 것이며, 서버 로그를 stderr 쪽으로 보내지 않고 따로 보관하는 기능을 사용한다면, "postgres: logger process" 같은 프로세스도 보일 것이다. 나머지는 클라이언트가 접속해서 서버측에서 만든 세션 프로세스들이다. 이 세션 프로세스들은 다음과 같은 양식으로 보여준다:
postgres: 사용자 데이터베이스 호스트 현재작업상태
사용자, 데이터베이스, (클라이언트) 호스트 정보는 그 프로세스가 종료 될 때까지 항상 같지만, 현재작업상태 정보는 그 세션의 작업 상태에 따라 바뀐다. 현재작업상태에 idle은 이 세션이 클라이언트의 명령을 대기하고 있음을 뜻한다. idle in transaction으로 표시되는 것은 그 세션이 현재, BEGIN 명령을 사용해서, 트랜잭션 영역 안에 있지만, 클라이언트 측에서 아무 작업도 안하고 있는 상태이다. SELECT과 같이 명령어 종류를 보여 주는 경우도 있고, 그 뒤에, waiting이 붙어 있는 경우도 있다. 이 경우는 다른 프로세스가 어떤 작업을 하고 있어, 이 세션이 해당 작업을 대기하고 있는 상태를 나타낸다. 윗 예제를 보면, 15610 프로세스 때문에, 15606 프로세스가 작업을 대기하고 있음을 알 수 있다. (윗 예제 화면에서는 다른 세션들이 없기 때문에, 15610 프로세스가 잠금 문제를 일으킨 프로세스로 파악 할 수 있다. 어떤 잠금을 사용하고 있기에, 다른 프로세스가 기다리고 있는지에 대한 자세한 정보는 pg_locks 뷰를 통해서 알 수 있다.)
update_process_title 환경 설정값을 off로 지정했다면, 프로세스 현재작업상태 자리에는 그 프로세스의 첫 작업에 대한 이름으로 지정되면, 그 프로세스가 종료될 때까지 그대로 유지된다. 몇몇 OS에서는 이 프로세스 이름을 바꾸는 작업이 부하를 유발한다고 사용하지 않는 경우도 있고, 또 몇몇 OS에서는 이 작업에 대해서 전혀 신경 쓰지 않는 경우도 있다.
작은 정보: Solaris에서는 이 부분 처리가 독특하다. 먼저 /bin/ps 명령 대신에, /usr/ucb/ps 사용하고, w 옵션을 두 개 지정하고, 서버 시작 최상위 프로세스의 이름이 각 세션 프로세스의 이름보다 짧게 지정한다면, 세션 프로세스들의 이름이 동적으로 바뀌는 것을 살펴볼 수 있다. 하지만, 이 세가지 조건 중 하나라도 만족하지 않는다면, 모든 프로세스 이름은 서버 최상위 프로세스의 이름과 같게 보인다.