토토 결과's통계 수집가는 지원하는 서브 시스템입니다 서버 활동에 대한 정보 수집 및보고. 현재 컬렉터는 테이블 및 인덱스에 대한 액세스를 계산할 수 있습니다. 디스크 블록 및 개별 열 용어에서. 또한 지원합니다 현재 다른 사람이 실행중인 정확한 명령을 결정합니다 서버 프로세스.
통계 수집이 쿼리에 약간의 오버 헤드가 추가되므로 실행, 시스템은 수집 여부를 구성 할 수 있습니다. 정보를 수집하십시오. 이것은 구성에 의해 제어됩니다 일반적으로 설정된 매개 변수토토 결과.conf. (보다17 장설정에 대한 자세한 내용 구성 매개 변수.)
매개 변수stats_start_collector로 설정해야합니다true통계 수집가가 전혀 출시 될 것입니다. 이것은 기본입니다 권장 설정이지만 없으면 꺼질 수 있습니다. 통계에 대한 관심과 마지막 하락마다 짜내고 싶어 오버 헤드. (그러나 저축은 작을 것입니다.) 참고 서버가있는 동안이 옵션을 변경할 수 없습니다. 달리기.
매개 변수stats_command_stri토토 결과, stats_block_level, 그리고stats_row_level실제로 수집가에게 전송되는 정보의 양을 제어 따라서 얼마나 많은 런 타임 오버 헤드가 발생하는지 결정하십시오. 이것들 서버 프로세스가 전송되는지 여부를 각각 결정합니다 현재 명령 문자열, 디스크 블록 레벨 액세스 통계 및 수집기에 대한로드 레벨 액세스 통계. 일반적으로 이것들 매개 변수가 설정됩니다토토 결과.conf모든 서버 프로세스에 적용되므로 가능하지만 가능합니다. 를 사용하여 개별 세션에서 켜거나 끄려면PostgreSQL : 문서 : 8.1 : 윈 토토명령. (방지하기 위해 평범한 사용자는 자신의 활동을 숨기지 못합니다 관리자, 슈퍼업자만이이를 변경할 수 있습니다 가있는 매개 변수SET.)
참고 :매개 변수 이후stats_command_stri토토 결과, stats_block_level및stats_row_level기본값으로거짓, 통계는 거의 수집되지 않습니다 기본 구성. 이들 중 하나 이상을 활성화합니다 구성 변수는 다음을 크게 향상시킵니다 통계 수집가가 생성 한 유용한 데이터의 양, 추가 런 타임 오버 헤드를 희생하여.
몇 가지 사전 정의 된 뷰, 나열된테이블 24-1, 통계 결과를 보여줄 수 있습니다 수집. 또는 The를 사용하여 사용자 정의보기를 구축 할 수 있습니다 기본 통계 기능.
통계를 사용하여 현재 활동을 모니터링 할 때 정보가 업데이트되지 않는다는 것을 인식하는 것이 중요합니다 순간적으로. 각 개별 서버 프로세스는 새로 전송됩니다 가기 직전에 수집가에게 블록 및 행 액세스가 계산됩니다. 게으른; 그래서 여전히 진행중인 쿼리 나 거래는 표시된 총계에 영향을 미칩니다. 또한 수집가 자체는 a 최대 한 번에 새로운 보고서pgstat_stat_interval밀리 초 (500) 서버를 구축하는 동안 변경). 그래서 표시되었습니다 정보는 실제 활동에 뒤떨어집니다. 현재 쿼리 정보는 즉시 수집가에게보고되지만 그렇습니다 여전히의 적용pgstat_stat_interval지연되기 전에 보이는.
또 다른 중요한 점은 서버 프로세스가 이러한 통계를 표시하도록 요청하면 먼저 가장 최근의 보고서는 수집기 프로세스에 의해 방출 된 다음 이 스냅 샷을 모든 통계적 뷰에 계속 사용하고 현재 거래가 끝날 때까지 기능합니다. 그래서 계속해서 통계는 변하지 않는 것으로 보입니다. 현재 거래. 이것은 버그가 아닌 기능입니다 통계에서 몇 가지 쿼리를 수행 할 수 있으며 숫자가 걱정되지 않고 결과를 상관시킵니다 당신 아래에서 변화합니다. 그러나 새로운 결과를보고 싶다면 각 쿼리마다 외부에서 쿼리를해야합니다. 거래 블록.
표 24-1. 표준 통계보기
보기 | 설명 |
---|---|
pg_stat_activity | 서버 프로세스 당 1 행, 데이터베이스 OID 표시, 데이터베이스 이름, 프로세스id, 사용자 OID, 사용자 이름, 현재 쿼리, 현재 쿼리가 실행되기 시작한 시간, 프로세스가 시작된 시간과 고객의 시간 주소 및 포트 번호. 데이터를보고하는 열 현재 쿼리에서는 다음과 같은 경우에만 사용할 수 있습니다 매개 변수stats_command_stri토토 결과켜졌습니다. 또한이 열은 다음과 같이 읽습니다 뷰를 검사하는 사용자가 슈퍼 사용자가 아닌 한 NULL 또는 프로세스를 소유하는 사용자와 동일 보고 된. (수집가 때문에 보고 지연, 현재 쿼리는 가능합니다 장기 실행 쿼리를위한 최신 정보.) |
PG_STAT_DATABASE | 데이터베이스 당 하나의 행, 데이터베이스 OID 표시, 데이터베이스 이름, 활성 서버 프로세스 수 해당 데이터베이스에 연결된 트랜잭션 수 해당 데이터베이스, 총 디스크에서 커밋 및 롤백 블록 읽기 및 총 버퍼 히트 (즉, 블록 읽기 이미 버퍼에서 블록을 찾아서 피하는 요청 은닉처). |
pg_stat_all_tables | 현재 데이터베이스의 각 테이블에 대해 (포함 토스트 테이블), 테이블 OID, 스키마 및 테이블 이름, 시작된 순차 스캔 수, 라이브 수 순차적 스캔, 인덱스 스캔 횟수에 의해 행하는 행 시작 (테이블에 속하는 모든 인덱스에 따라), 인덱스 스캔으로 가져온 라이브 행 및 숫자 행 삽입, 업데이트 및 삭제. |
PG_STAT_SYS_TABLE | 동일pg_stat_all_tables시스템 테이블이 표시됩니다. |
pg_stat_user_tables | 동일pg_stat_all_tables사용자 테이블이 표시됩니다. |
PG_STAT_ALL_INDEXES | 현재 데이터베이스의 각 인덱스에 대해 테이블 인덱스 OID, 스키마, 테이블 및 인덱스 이름, 번호 인덱스에 시작된 인덱스 스캔, 인덱스 수 인덱스 스캔 및 라이브 수에 의해 반환 된 항목 이를 사용하는 간단한 인덱스 스캔으로 가져온 테이블 행 색인. |
PG_STAT_SYS_INDEXES | 동일PG_STAT_ALL_INDEXES시스템 테이블의 인덱스가 표시됩니다. |
PG_STAT_USER_INDEXES | 동일PG_STAT_ALL_INDEXES사용자 테이블의 인덱스가 표시됩니다. |
pg_statio_all_tables | 현재 데이터베이스의 각 테이블에 대해 (포함 토스트 테이블), 테이블 OID, 스키마 및 테이블 이름, 해당 테이블에서 읽은 디스크 블록 수, 수 버퍼 히트, 디스크 블록 수는 읽기 및 버퍼입니다 해당 테이블의 모든 인덱스에서 히트, 디스크 번호 해당 테이블의 보조에서 읽기 및 버퍼 히트 블록 토스트 테이블 (있는 경우) 및 디스크 블록 번호 읽기 토스트 테이블의 인덱스에 대한 버퍼 히트. |
PG_STATIO_SYS_TABLE | 동일pg_statio_all_tables를 제외하고 시스템 테이블 만 표시됩니다. |
pg_statio_user_tables | 동일pg_statio_all_tables를 제외하고 사용자 테이블 만 표시됩니다. |
pg_statio_all_indexes | 현재 데이터베이스의 각 인덱스에 대해 테이블 인덱스 OID, 스키마, 테이블 및 인덱스 이름, 숫자 디스크 블록은 해당 색인의 읽기 및 버퍼 히트입니다. |
PG_STATIO_SYS_INDEXES | 동일PG_STATIO_ALL_INDEXES를 제외하고 시스템 테이블의 인덱스 만 표시됩니다. |
PG_STATIO_USER_INDEXES | 동일PG_STATIO_ALL_INDEXES를 제외하고 사용자 테이블의 인덱스 만 표시됩니다. |
pg_statio_all_sequences | 현재 데이터베이스의 각 시퀀스 객체에 대해, 시퀀스 OID, 스키마 및 시퀀스 이름, 숫자 디스크 블록은 해당 시퀀스에서 읽기 및 버퍼 히트입니다. |
PG_STATIO_SYS_SEVESSENCES | 동일PG_STATIO_ALL_SEVESSENCES시스템 시퀀스 만 표시됩니다. (현재, 시스템 없음 시퀀스가 정의 되므로이보기는 항상입니다 비어 있는.) |
PG_STATIO_USER_SEVERENCES | 동일PG_STATIO_ALL_SEATENCES를 제외하고 사용자 시퀀스 만 표시됩니다. |
인덱스 당 통계는 특히 유용합니다 사용중인 인덱스와 얼마나 효과적인 지 인덱스를 결정하십시오. 이다.
시작토토 결과8.1, 인덱스는 직접 또는 직접 또는 경고 할 수 있습니다"비트 맵 스캔". 비트 맵에서 출력을 스캔합니다 여러 인덱스는 또는 또는 또는 규칙을 통해 결합 될 수 있습니다. 그렇습니다 개별 힙 행을 연관시키기가 어렵습니다 비트 맵 스캔을 사용하는 경우 특정 인덱스. 따라서 a 비트 맵 스캔은를 증가시킵니다.PG_STAT_ALL_INDEXES.idx_tup_read인덱스의 경우 카운트 사용하고를 증가시킵니다.pg_stat_all_tables.idx_tup_fetch테이블을 계산하지만 영향을 미치지 않습니다PG_STAT_ALL_INDEXES.idx_tup_fetch.
참고 :전토토 결과8.1,idx_tup_read및idx_tup_fetch카운트는 본질적으로였습니다 항상 동일합니다. 이제 그들은 없이도 다를 수 있습니다 비트 맵 스캔 고려idx_tup_read인덱스 항목을 계산합니다 인덱스에서 검색idx_tup_fetch라이브 행이 가져온 카운트 테이블에서; 후자는 죽은 사람이 적을 것입니다 지수를 사용하여 커밋되지 않은 행을 가져옵니다.
thePG_STATIO_보기는입니다 버퍼의 효과를 결정하는 데 주로 유용합니다 은닉처. 실제 디스크 읽기 수가 훨씬 작을 때 버퍼 히트 수보다 캐시가 만족 스럽습니다. 커널 호출을 호출하지 않고 대부분의 요청을 읽습니다. 하지만, 이 통계는 전체 이야기를 제공하지 않습니다. 어느토토 결과손잡이 디스크 I/O,에없는 데이터토토 결과버퍼 캐시가 여전히 존재할 수 있습니다 커널의 I/O 캐시에서 여전히 가져올 수 있습니다. 물리적 읽기를 필요로하지 않고. 관심있는 사용자 더 자세한 정보 획득토토 결과I/O 동작을 사용하는 것이 좋습니다 그만큼토토 결과통계 운영 체제 유틸리티와 함께 수집가 커널의 I/O 처리에 대한 통찰력을 허용합니다.
통계를 보는 다른 방법은 동일한 기본 통계 액세스를 사용하는 쿼리 작성 이러한 표준보기와 같은 기능. 이러한 기능은 있습니다 에 나열됨테이블 24-2. 다이타베이스 액세스 기능은 데이터베이스 OID를 취합니다 보고 할 데이터베이스를 식별하는 인수. 그만큼 테이블 및 인덱스 별 기능은 테이블 또는 인덱스 OID를 취합니다. (현재 데이터베이스의 테이블 및 인덱스 만 이러한 기능으로 볼 수 있습니다.) 서버 프로세스 액세스 함수는 서버 프로세스 번호를 사용합니다. 현재 활성 서버 프로세스의 수에.
표 24-2. 통계 액세스 기능
기능 | 반환 유형 | 설명 |
---|---|---|
pg_stat_get_db_numbackends (OID) |
Integer | 데이터베이스의 활성 서버 프로세스 수 |
PG_STAT_GET_DB_XACT_COMMIT (OID) |
bigint | 데이터베이스에 커밋 된 트랜잭션 |
pg_stat_get_db_xact_rollback (OID) |
bigint | 데이터베이스에서 트랜잭션이 롤백되었습니다 |
pg_stat_get_db_blocks_fetched (OID) |
bigint | 디스크 블록 페치 요청 수 데이터 베이스 |
PG_STAT_GET_DB_BLOCKS_HIT (OID) |
bigint | 캐시에서 발견 된 디스크 블록 페치 요청 수 데이터베이스 |
PG_STAT_GET_NUMSCANS (OID) |
bigint | 인수가 a 테이블 또는 인수가있을 때 수행 된 인덱스 스캔 수 인덱스 |
pg_stat_get_tuples_returned (OID) |
bigint | 순차 스캔에 의해 읽는 행 수 인수는 테이블 또는 인덱스 항목 수입니다 인수가 색인 일 때 반환 됨 |
pg_stat_get_tuples_fetched (OID) |
bigint | 비트 맵 스캔에 의해 가져온 테이블 행의 수 인수는 테이블이거나 단순하게 가져온 테이블 행입니다. 인수가 인덱스를 사용하여 인덱스 스캔 색인 |
PG_STAT_GET_TUPLES_INSERTED (OID) |
bigint | 표에 삽입 된 행 수 |
PG_STAT_GET_TUPLES_UPDATED (OID) |
bigint | 표에서 업데이트 된 행 수 |
pg_stat_get_tuples_deleted (OID) |
bigint | 표에서 삭제 된 행 수 |
pg_stat_get_blocks_fetched (OID) |
bigint | 테이블에 대한 디스크 블록 페치 요청 수 색인 |
PG_STAT_GET_BLOCKS_HIT (OID) |
bigint | 캐시에 발견 된 디스크 블록 요청 수 테이블 또는 색인 |
pg_stat_get_backend_idset () |
정수 세트 | 현재 활성 서버 프로세스 번호 세트 (1에서 활성 서버 프로세스 수에서). 보다 텍스트의 사용 예 |
pg_backend_pid () |
Integer | 서버 프로세스의 프로세스 ID에 첨부 현재 세션 |
pg_stat_get_backend_pid (정수) |
정수 | 지정된 서버 프로세스의 프로세스 ID |
pg_stat_get_backend_dbid (정수) |
OID | 지정된 서버 프로세스의 데이터베이스 ID |
pg_stat_get_backend_userid (정수) |
OID | 지정된 서버 프로세스의 사용자 ID |
pg_stat_get_backend_activity (정수) |
텍스트 | 주어진 서버 프로세스의 활성 명령 (null if 현재 사용자는 슈퍼 사용자 나 동일한 사용자가 아닙니다. 세션이 쿼리되는 것처럼, 또는stats_command_stri토토 결과켜져 있지 않음) |
pg_stat_get_backend_activity_start (정수) |
시간대가있는 타임 스탬프 | 주어진 서버 프로세스 시간 ' 현재 실행중인 쿼리가 시작되었습니다 (IF 인 경우 NULL 현재 사용자는 슈퍼업자가 아니고 같은 사용자 세션이 쿼리되는 세션의 경우, 또는stats_command_stri토토 결과켜져 있지 않음) |
pg_stat_get_backend_start (정수) |
시간대가있는 타임 스탬프 | 주어진 서버 프로세스의 시간 현재 사용자가 슈퍼 사용자가 아닌 경우 시작 또는 NULL 세션과 같은 사용자도 쿼리 |
pg_stat_get_backend_client_addr (Integer) |
inet | 주어진에 연결된 클라이언트의 IP 주소 서버 프로세스. 연결이 유닉스를 초과하면 NULL 도메인 소켓. 또한 현재 사용자가 아닌 경우 NULL 세션과 같은 슈퍼 사용자 나 동일한 사용자 쿼리 |
pg_stat_get_backend_client_port (정수) |
정수 | 클라이언트의 TCP 포트 번호 주어진 서버 프로세스. -1 연결이 a를 초과하는 경우 유닉스 도메인 소켓. 현재 사용자가 아닌 경우 NULL 세션과 같은 슈퍼 사용자 나 동일한 사용자 쿼리 |
PG_STAT_RESET () |
부울 | 현재 수집 된 모든 통계 재설정 |
참고 :
blocks_fetched
마이너스blocks_hit
커널 수를 제공read ()
표, 인덱스 또는 데이터베이스; 그러나 실제 수 물리적 판독은 일반적으로 커널 수준으로 인해 낮습니다 버퍼링.
함수pg_stat_get_backend_idset
제공 a
각 활성 서버마다 하나의 행을 생성하는 편리한 방법
프로세스. 예를 들어,를 보여려면PIDs 및 모든 서버의 현재 쿼리
프로세스 :
PG_STAT_GET_BACKEND_PID (S.BACKENDID)를 ProcPID로 선택하십시오. pg_stat_get_backend_activity (s.backendid)는 current_query입니다 from (select pg_stat_get_backend_idset () as backendid)로 s;