포스트그레SQL의토토 결과 수집기은 다음을 지원하는 하위 시스템입니다. 서버 활동에 대한 정보 수집 및 보고. 현재 수집기는 테이블 및 인덱스에 대한 액세스를 계산할 수 있습니다. 디스크 블록 및 개별 행 측면에서 모두. 또한 지원합니다 현재 다른 사람이 실행 중인 정확한 명령을 확인합니다. 서버 프로세스.
통계 수집으로 인해 쿼리에 약간의 오버헤드가 추가되므로 실행 시 시스템은 수집 여부를 구성할 수 있습니다. 정보를 수집합니다. 이는 구성에 의해 제어됩니다. 일반적으로 설정되는 매개변수는토토 결과.conf. (참조17장설정에 대한 자세한 내용 구성 매개변수.)
매개변수stats_start_collector다음으로 설정되어야 함사실토토 결과용 컬렉터가 전혀 출시되지 않습니다. 이는 기본값이며 권장 설정이지만 설정이 없으면 꺼질 수 있습니다. 토토 결과에 관심이 있고 마지막 한 방울까지 짜내고 싶어합니다. 오버헤드의. (그러나 절감액은 작을 가능성이 높습니다.) 참고 서버가 켜져 있는 동안에는 이 옵션을 변경할 수 없습니다. 달리고 있다.
매개변수stats_command_string, stats_block_level, 그리고stats_row_level얼마나 많은 정보가 실제로 수집기로 전송되는지 제어 따라서 런타임 오버헤드가 얼마나 발생하는지 결정합니다. 이것들 서버 프로세스가 메시지를 보내는지 여부를 각각 결정합니다. 현재 명령 문자열, 디스크 블록 수준 액세스 통계 및 수집기에 대한 행 수준 액세스 통계입니다. 일반적으로 이러한 매개변수는 다음에서 설정됩니다.토토 결과.conf모든 서버 프로세스에 적용되지만 가능합니다. 다음을 사용하여 개별 세션에서 켜거나 끄려면PostgreSQL : 문서 : 8.1 : 윈 토토명령. (방지하기 위해 일반 사용자는 자신의 활동을 숨기지 못하도록 관리자, 슈퍼유저만 이를 변경할 수 있습니다. 매개변수SET.)
참고:매개변수 이후stats_command_string, stats_block_level및stats_row_level기본값은거짓, 통계는 거의 수집되지 않습니다. 기본 구성. 다음 중 하나 이상을 활성화합니다. 구성 변수는 토토 결과 수집기가 생성하는 유용한 데이터의 양, 추가적인 런타임 오버헤드가 발생합니다.
다음에 나열된 사전 정의된 여러 보기테이블 24-1, 통계 결과를 표시하는 데 사용할 수 있습니다. 컬렉션입니다. 또는 다음을 사용하여 사용자 정의 보기를 작성할 수 있습니다. 기본 통계 함수.
통계를 사용하여 현재 활동을 모니터링하는 경우, 정보가 업데이트되지 않는다는 점을 인식하는 것이 중요합니다. 즉시. 각 개별 서버 프로세스는 새로운 정보를 전송합니다. 이동 직전에 수집기에 대한 블록 및 행 액세스 횟수 유휴; 따라서 아직 진행 중인 쿼리나 트랜잭션은 표시된 총계에 영향을 미칩니다. 또한 컬렉터 자체도 최대 한 번 새 보고서를 작성하세요.PGSTAT_STAT_INTERVAL밀리초(500 서버를 구축하는 동안 변경되었습니다). 그래서 표시된 정보가 실제 활동보다 뒤처집니다. 현재 쿼리 정보는 수집자에게 즉시 보고되지만, 여전히 해당PGSTAT_STAT_INTERVAL다음이 되기까지의 지연 보입니다.
또 다른 중요한 점은 서버 프로세스가 이러한 통계 중 하나를 표시하도록 요청하면 먼저 수집기 프로세스에서 생성된 가장 최근 보고서 모든 통계 보기에 이 스냅샷을 계속 사용하고 현재 트랜잭션이 끝날 때까지 작동합니다. 그래서 계속하는 한 통계는 변경되지 않는 것으로 나타납니다. 현재 거래. 이는 버그가 아닌 기능입니다. 이를 통해 통계에 대한 여러 쿼리를 수행할 수 있으며 숫자가 틀릴까 걱정하지 않고 결과를 연관시키세요. 당신 아래에서 변화합니다. 하지만 새로운 결과를 보고 싶다면 각 쿼리에 대해 쿼리는 외부에서 수행해야 합니다. 거래 차단.
표 24-1. 표준 토토 결과 보기
| 뷰 이름 | 설명 |
|---|---|
| pg_stat_activity | 서버 프로세스당 하나의 행, 데이터베이스 OID 표시, 데이터베이스 이름, 프로세스ID, 사용자 OID, 사용자 이름, 현재 쿼리, 현재 쿼리가 실행되기 시작한 시간, 프로세스가 시작된 시간과 클라이언트의 시간 주소와 포트 번호. 데이터를 보고하는 열 현재 쿼리에 대한 정보는 다음과 같은 경우에만 사용할 수 있습니다. 매개변수stats_command_string켜졌습니다. 또한 이 열은 다음과 같이 읽습니다. 뷰를 검사하는 사용자가 수퍼유저가 아닌 경우 null 또는 프로세스를 소유한 사용자와 동일합니다. 에 보고되었습니다. (콜렉터의 특성상 보고 지연, 현재 쿼리는 장기 실행 쿼리에 대한 최신 정보입니다.) |
| pg_stat_database | 데이터베이스당 하나의 행, 데이터베이스 OID 표시, 데이터베이스 이름, 활성 서버 프로세스 수 해당 데이터베이스에 연결된 트랜잭션 수 해당 데이터베이스에서 커밋 및 롤백됨, 총 디스크 블록 읽기 및 총 버퍼 적중(예: 블록 읽기 버퍼에 이미 있는 블록을 찾아 요청을 방지합니다. 캐시). |
| pg_stat_all_tables | 현재 데이터베이스의 각 테이블(포함) TOAST 테이블), 테이블 OID, 스키마 및 테이블 이름, 시작된 순차 스캔 수, 라이브 수 순차 스캔으로 가져온 행, 인덱스 스캔 수 (테이블에 속한 모든 인덱스에 대해) 시작되었습니다. 인덱스 스캔으로 가져온 라이브 행 수 및 숫자 행 삽입, 업데이트 및 삭제. |
| pg_stat_sys_tables | 다음과 같음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 | 현재 데이터베이스의 각 테이블에 대해(포함 TOAST 테이블), 테이블 OID, 스키마 및 테이블 이름, 해당 테이블에서 읽은 디스크 블록 수, 버퍼 적중, 읽은 디스크 블록 수 및 버퍼 해당 테이블의 모든 인덱스 적중, 디스크 수 해당 테이블의 보조 테이블에서 읽기 및 버퍼 적중을 차단합니다. TOAST 테이블(있는 경우) 및 읽은 디스크 블록 수 TOAST 테이블의 인덱스에 대한 버퍼 적중. |
| pg_statio_sys_tables | 다음과 같습니다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_sequences | 다음과 같음pg_statio_all_sequences, 그 외에는 시스템 시퀀스만 표시됩니다. (현재는 시스템이 없습니다. 시퀀스가 정의되어 있으므로 이 뷰는 항상 비어 있습니다.) |
| pg_statio_user_sequences | 다음과 같음pg_statio_all_sequences, 그 외에는 사용자 시퀀스만 표시됩니다. |
색인별 통계는 특히 다음과 같은 경우에 유용합니다. 어떤 인덱스가 사용되고 있는지, 얼마나 효과적인지 확인 입니다.
시작토토 결과8.1, 색인은 직접 또는 통해 사용할 수 있습니다."비트맵 스캔". 비트맵 스캔에서 출력 여러 인덱스는 AND 또는 OR 규칙을 통해 결합될 수 있습니다. 그렇죠 개별 힙 행 페치를 연결하기가 어렵습니다. 비트맵 스캔을 사용할 때 특정 인덱스. 그러므로 비트맵 스캔은 를 증가시킵니다.pg_stat_all_indexes.idx_tup_read인덱스에 대한 개수 사용하고 를 증가시킵니다.pg_stat_all_tables.idx_tup_fetch테이블에 포함되지만 영향을 미치지 않습니다pg_stat_all_indexes.idx_tup_fetch.
참고:이전포스트그레SQL8.1, 그idx_tup_read그리고idx_tup_fetch카운트는 기본적으로 항상 평등합니다. 이제는 없어도 달라질 수 있어 비트맵 스캔을 고려하고 있기 때문입니다.idx_tup_read색인 항목 수를 계산합니다 동안 인덱스에서 검색됨idx_tup_fetch가져온 실시간 행 수를 계산합니다. 테이블에서; 후자는 죽거나 죽으면 더 적습니다. 아직 커밋되지 않은 행은 인덱스를 사용하여 가져옵니다.
그pg_statio_조회수는 주로 버퍼의 효율성을 결정하는 데 유용합니다. 캐시. 실제 디스크 읽기 횟수가 훨씬 적은 경우 버퍼 적중 횟수보다 캐시가 만족스러운 것입니다. 커널 호출을 호출하지 않고 대부분의 읽기 요청을 수행합니다. 그러나, 이 토토 결과는 전체 이야기를 제공하지 않습니다. 어느 곳에서포스트그레SQL처리 디스크 I/O, 데이터에 없는 데이터토토 결과버퍼 캐시가 여전히 상주할 수 있음 커널의 I/O 캐시에 있으므로 계속 가져올 수 있습니다. 물리적으로 읽을 필요 없이. 관심있는 사용자 에 대한 더 자세한 정보를 얻는 중입니다.포스트그레SQLI/O 동작을 사용하는 것이 좋습니다.토토 결과토토 결과 운영 체제 유틸리티와 결합된 수집기 커널의 I/O 처리에 대한 통찰력을 제공합니다.
통계를 보는 다른 방법은 다음과 같이 설정할 수 있습니다. 동일한 기본 통계 액세스를 사용하는 쿼리 작성 이러한 표준 보기와 같은 기능을 합니다. 이러한 기능은 에 나열됨테이블 24-2. 데이터베이스별 액세스 기능은 데이터베이스 OID를 사용합니다. 보고할 데이터베이스를 식별하기 위한 인수로 사용됩니다. 는 테이블별 및 인덱스별 함수는 테이블 또는 인덱스 OID를 사용합니다. (현재 데이터베이스의 테이블과 인덱스만 가능합니다. 이러한 기능으로 볼 수 있습니다.) 서버별 프로세스별 액세스 함수는 서버 프로세스 번호를 사용하며 그 범위는 1부터 1까지입니다. 현재 활성 서버 프로세스 수입니다.
표 24-2. 토토 결과 접근 기능
| 기능 | 반환 유형 | 설명 |
|---|---|---|
pg_stat_get_db_numbackends(oid) |
정수 | 데이터베이스의 활성 서버 프로세스 수 |
pg_stat_get_db_xact_commit(oid) |
비긴트 | 데이터베이스에서 커밋된 트랜잭션 |
pg_stat_get_db_xact_rollback(oid) |
비긴트 | 데이터베이스에서 트랜잭션이 롤백되었습니다. |
pg_stat_get_db_blocks_fetched(oid) |
비긴트 | 다음에 대한 디스크 블록 가져오기 요청 수 데이터베이스 |
pg_stat_get_db_blocks_hit(oid) |
비긴트 | 캐시에서 발견된 디스크 블록 가져오기 요청 수 데이터베이스용 |
pg_stat_get_numscans(oid) |
비긴트 | 인수가 다음인 경우 수행된 순차 스캔 수 인수가 다음과 같을 때 수행되는 테이블 또는 인덱스 스캔 수 색인 |
pg_stat_get_tuples_returned(oid) |
비긴트 | 다음 경우에 순차 스캔으로 읽은 행 수 인수는 테이블이거나 인덱스 항목의 수입니다. 인수가 인덱스인 경우 반환됨 |
pg_stat_get_tuples_fetched(oid) |
비긴트 | 다음의 경우 비트맵 스캔으로 가져온 테이블 행 수 인수는 테이블이거나 간단한 방법으로 가져온 테이블 행입니다. 인수가 다음인 경우 인덱스를 사용하여 인덱스 스캔 색인 |
pg_stat_get_tuples_inserted(oid) |
비긴트 | 테이블에 삽입된 행 수 |
pg_stat_get_tuples_updated(oid) |
비긴트 | 테이블에서 업데이트된 행 수 |
pg_stat_get_tuples_deleted(oid) |
비긴트 | 테이블에서 삭제된 행 수 |
pg_stat_get_blocks_fetched(oid) |
비긴트 | 테이블 또는 디스크 블록 가져오기 요청 수 색인 |
pg_stat_get_blocks_hit(oid) |
비긴트 | 다음에 대한 캐시에서 발견된 디스크 블록 요청 수 테이블 또는 인덱스 |
pg_stat_get_backend_idset() |
정수 집합 | 현재 활성 서버 프로세스 번호 세트 (1부터 활성 서버 프로세스 수까지). 참조 본문의 사용 예 |
pg_backend_pid() |
정수 | 다음에 연결된 서버 프로세스의 프로세스 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) 현재 사용자는 슈퍼유저도 아니고 동일한 사용자도 아닙니다. 쿼리되는 세션의 세션과 동일하거나stats_command_string켜져 있지 않음) |
pg_stat_get_backend_activity_start(정수) |
시간대가 포함된 타임스탬프 | 주어진 서버가 처리하는 시간' 현재 실행 중인 쿼리가 시작되었습니다. 현재 사용자는 슈퍼유저도 아니고 다음과 같은 사용자도 아닙니다. 쿼리되는 세션의 것, 또는stats_command_string켜져 있지 않음) |
pg_stat_get_backend_start(정수) |
시간대가 포함된 타임스탬프 | 주어진 서버 프로세스가 실행된 시간 시작됨, 또는 현재 사용자가 수퍼유저가 아닌 경우 null 세션의 사용자와 동일한 사용자도 아닙니다. 쿼리 |
pg_stat_get_backend_client_addr(정수) |
inet | 주어진 장치에 연결된 클라이언트의 IP 주소 서버 프로세스. 연결이 Unix를 통해 이루어지는 경우 Null 도메인 소켓. 현재 사용자가 아닌 경우에도 null입니다. 슈퍼유저 또는 세션의 사용자와 동일한 사용자 쿼리 중 |
pg_stat_get_backend_client_port(정수) |
정수 | 에 연결된 클라이언트의 TCP 포트 번호 주어진 서버 프로세스. -1 연결이 다음을 초과하는 경우 Unix 도메인 소켓. 현재 사용자가 아닌 경우 Null 슈퍼유저 또는 세션의 사용자와 동일한 사용자 쿼리 중 |
pg_stat_reset() |
부울 | 현재 수집된 모든 통계 재설정 |
참고:
blocks_fetched마이너스blocks_hit커널 수를 제공읽기()다음에 대해 호출이 발생했습니다. 테이블, 인덱스 또는 데이터베이스 하지만 실제 숫자는 물리적 읽기는 일반적으로 커널 수준으로 인해 더 낮습니다. 버퍼링.
함수pg_stat_get_backend_idset제공
각 활성 서버에 대해 하나의 행을 생성하는 편리한 방법
프로세스. 예를 들어, 다음을 표시하려면PIDs 및 모든 서버의 현재 쿼리
프로세스:
SELECT pg_stat_get_backend_pid(s.backendid) AS procpid,
pg_stat_get_backend_activity(s.backendid) AS current_query
FROM (SELECT pg_stat_get_backend_idset() AS 백엔드) AS s;