PostgreSQL 9.2.4 문서 | ||||
---|---|---|---|---|
이전 | 위로 | 장 27. 데이터베이스 성능 모니터링 | 다음 |
대부분의 유닉스 플랫폼에서는 ps 명령을 통해서 조회 할 수 있는 PostgreSQL 프로세스들의 이름을 알기 쉽게 변경해서 보여준다. 이렇게 해서, 이 명령을 이용하면, 직관적으로 현재 서버의 상태를 간략하게 살펴 볼 수 있다. 다음은 이 명령을 사용한 예제 화면이다.
$ 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 명령 옵션은 각 시스템마다 약간씩 다름으로 해당 시스템에 맞게 적당히 사용하면 된다.) 첫 줄은 서버 최상위 프로세스다. 프로세스의 이름을 살펴보면, 서버를 실행 할 때 사용한 명령행 옵션들이 보인다. 다음 다섯개의 프로세스는 최상위 프로세스가 자동으로 실행하는 백그라운드 서버 프로세스들이다. ("stats collector" 프로세스나 "autovacuum launcher" 프로세스는 서버 환경 설정에서 이들의 사용을 안하겠다고 지정했다면, 보이지 않을 수도 있다.) 나머지 프로세스들은 클라이언트에서 연결 하면서 생긴 것들이다. 이들은 각각 프로세스 이름으로 그 접속 정보와 상태를 구별 할 수 있다.
postgres: 사용자 데이터베이스 호스트 작업내용
이 클라이언트 접속을 통해서 생긴 프로세스들은 클라이언트의 접속이 끊기면 프로세스들도 사라진다. 또한 프로세스 이름으로 idle이 표시 된다면, 그 프로세스는 현재 클라이언트에서 서버에 대해서 아무런 작업도 하지 않고 있음을 의미한다. (BEGIN 구문 안에서 아무것도 하지 않고 있다면, idle in transaction으로 표시된다) 또한 클라이언트가 서버쪽에서 작업을 하고 있다면, SELECT와 같이 그 작업에 대한 대략적인 정보를 보여준다. 또 다른 하나로, waiting 으로 표시되는 것이 있는데, 이것은 현재 다른 프로세스 작업 때문에 자신의 작업이 대기하고 있음을 나타낸다. 윗 예제의 경우라면, 15606 프로세스는 15610 프로세스 때문에 대기 상태로 있음이 분명하다. 왜냐하면, 해당 데이터베이스에 대해서 다른 세션이 15610 프로세스 뿐이기 때문이다. 이런 잠김 현상에 대한 구체적인 내용은 pg_locks 시스템 뷰를 통해서 살펴볼 수 있다.)
만일 update_process_title 환경 설정값을 꺼두었다면, 위에서 같이 각 프로세스들의 이름을 동적으로 바꾸지 않는다. 이때는 그 프로세스가 처음 만들어질 때의 이름을 계속 보여준다. 몇몇 플랫폼에서는 이런 프로세스 이름 출력 작업이 시스템의 부가적인 부하로 영향을 줄 수 있어, 이 설정값을 꺼두기도 한다. 물론 대부분의 플랫폼에서는 그 부하가 미비하겠지만.
작은 정보: Solaris 에서는 /bin/ps 명령 대신에, /usr/ucb/ps 명령을 사용하면, 위에서 설명한 방식으로 모니터링을 할 수 있다. 또한 w 옵션은 하나가 아니라, 두 개 사용해야한다. 또한 서버를 실행 할 때 사용했던 명령행의 길이가 내부적으로 실행되는 프로세스들의 명령행 길이보다 짧아야한다. 이 세가지 조건을 모두 만족한다면, 위에서 보는 것처럼 보일 것이고, 그렇지 않다면, 원래의 postgres 프로세스 이름들만 보일 것이다.