이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : F.30. 토토 사이트 - SQL 계획 및 실행의 통계 추적버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.30. 범퍼카 토토

the범퍼카 토토모듈은 서버에서 실행 된 모든 SQL 문의 실행 통계 추적 수단을 제공합니다.

추가하여 모듈을로드해야합니다범퍼카 토토toshared_preload_librariesinpostgresql.conf10685_10806

when범퍼카 토토로드되어 서버의 모든 데이터베이스에서 통계를 추적합니다. 이러한 통계에 액세스하고 조작하기 위해 모듈은보기를 제공합니다.범퍼카 토토및 유틸리티 함수범퍼카 토토_resetand범퍼카 토토. 이들은 전 세계적으로 사용할 수 없지만의 특정 데이터베이스에 대해 활성화 할 수 있습니다.확장 생성 범퍼카 토토.

F.30.1. 그만큼범퍼카 토토보기

모듈에 의해 수집 된 통계는 이름을 통해 제공됩니다.범퍼카 토토. 이보기에는 각각의 별개의 데이터베이스 ID, 사용자 ID 및 쿼리 ID에 대해 하나의 행이 포함됩니다 (모듈이 추적 할 수있는 최대의 별개의 명령문 수까지). 보기의 열은에 표시됩니다.테이블 F.22.

표 F.22. 범퍼카 토토

이름 타입 참조 설명
userID OID pg_authid.Oid 진술을 실행 한 사용자의 OID
dbid OID pg_database.Oid 진술이 실행 된 데이터베이스의 OID
QueryId bigint 내부 해시 코드, 진술의 구문 분석 트리에서 계산
쿼리 텍스트 대표 성명서의 텍스트
전화 bigint 실행 된 횟수
Total_Time 이중 정밀 성명서에 소비 된 총 시간, 밀리 초
min_time 이중 정밀 진술서에 소비 된 최소 시간, 밀리 초
max_time 이중 정밀 진술에 소요되는 최대 시간, 밀리 초
Mean_Time 이중 정밀 성명서에 소요되는 평균 시간, 밀리 초
stddev_time 이중 정밀도 진술서에 소요되는 시간의 인구 표준 편차, 밀리 초
bigint 성명서에 의해 검색되거나 영향을받는 총 행 수
shared_blks_hit bigint 문의 공유 블록 캐시의 총 수
shared_blks_read bigint 성명서에 의해 읽은 총 공유 블록 수
shared_blks_dirtied bigint 성명서에 의해 더러워진 총 공유 블록의 총 수
shared_blks_written bigint 성명서에 의해 작성된 총 공유 블록 수
local_blks_hit bigint 성명서별 로컬 블록 캐시의 총 수치
local_blks_read bigint 성명서에 의해 읽는 총계 블록 수
local_blks_dirtied bigint 성명서에 의해 더러워진 총 지역 블록의 총 수
local_blks_written bigint 성명서에 의해 작성된 총계 블록 수
temp_blks_read bigint 성명서에 의해 읽은 총 임시 블록 수
temp_blks_written bigint 진술에 의해 작성된 총 임시 블록 수
blk_read_time 이중 정밀 성명서가 블록을 읽는 데 소비 된 총 시간 (iftrack_io_timing활성화되어 있습니다. 그렇지 않으면 0)
blk_write_time 이중 정밀 성명서가 블록을 쓰는 데 소비 된 총 시간 (iftrack_io_timing활성화되어 있고 그렇지 않으면 Zero)

보안상의 이유로, 슈퍼업자와 회원 만PG_READ_ALL_STATS역할은 SQL 텍스트를 볼 수 있습니다.QueryId다른 사용자가 실행 한 쿼리. 그러나 다른 사용자는 데이터베이스에보기가 설치된 경우 통계를 볼 수 있습니다.

Plannable Queries (즉,select, 삽입, 업데이트삭제)는 단일로 결합됩니다범퍼카 토토내부 해시 계산에 따라 동일한 쿼리 구조가있을 때마다 항목. 일반적으로 쿼리에 나타나는 문자 상수의 값을 제외하고 의미 적으로 동등한 경우 두 쿼리 가이 목적에 대해 동일하게 간주됩니다. 유틸리티 명령 (즉, 다른 모든 명령)은 텍스트 쿼리 문자열을 기반으로 엄격하게 비교됩니다.

쿼리를 다른 쿼리와 일치시키기 위해 상수의 값이 무시되면 상수는와 같은 매개 변수 기호로 대체됩니다.$ 1, in범퍼카 토토디스플레이. 나머지 쿼리 텍스트는 특정 쿼리의 쿼리입니다.QueryId범퍼카 토토Entry.

경우에 따라 눈에 띄게 다른 텍스트가있는 쿼리가 단일로 병합 될 수 있습니다범퍼카 토토입력. 일반적으로 이것은 의미 적으로 동등한 쿼리에 대해서만 발생하지만 해시 충돌 가능성이 적 으면 관련없는 쿼리가 하나의 항목으로 병합됩니다. (그러나 다른 사용자 또는 데이터베이스에 속하는 쿼리에는 발생할 수 없습니다.)

이후QueryId해시 값은 쿼리의 패스트라 분석 후 표현에 따라 계산됩니다. 반대도 가능합니다. 동일한 텍스트가있는 쿼리는 별도의 항목으로 나타날 수 있습니다.search_path설정.

소비자범퍼카 토토사용하기를 원할 수도 있습니다QueryId(아마도dbidanduserID) 쿼리 텍스트보다 각 항목에 대해보다 안정적이고 신뢰할 수있는 식별자입니다. 그러나의 안정성에 대한 보장이 제한되어 있음을 이해하는 것이 중요합니다.QueryId해시 값. 식별자는 패스트리 분석 후 트리에서 파생되므로 그 값은 무엇 보다도이 표현에 나타나는 내부 객체 식별자의 함수입니다. 이것은 반 직관적 인 영향을 미칩니다. 예를 들어,범퍼카 토토두 쿼리의 실행 사이에 삭제되고 재현 된 테이블을 참조하면 두 개의 명백한 동일 쿼리가 뚜렷하다고 생각합니다. 해싱 프로세스는 또한 기계 아키텍처 및 플랫폼의 다른 측면의 차이에 민감합니다. 또한, 가정하는 것은 안전하지 않습니다.QueryId주요 버전에서에서 안정적입니다.PostgreSQL.

경험상QueryId값은 기본 서버 버전과 카탈로그 메타 데이터 세부 정보가 정확히 동일하게 유지되는 한 안정적이고 비교할 수 있다고 가정 할 수 있습니다. 물리적 WAL 리플레이를 기반으로 복제에 참여하는 두 개의 서버가 동일 할 수 있습니다QueryId동일한 쿼리의 값. 그러나 논리적 복제 체계는 모든 관련 세부 사항에서 복제본을 동일하게 유지하겠다고 약속하지 않으므로QueryId일련의 논리적 복제품에 걸쳐 비용을 축적하는 데 유용한 식별자가 아닙니다. 의심스러운 경우 직접 테스트를 권장합니다.

대표 쿼리 텍스트에서 상수를 대체하는 데 사용되는 매개 변수 기호는 다음 숫자에서 가장 높은 다음 숫자에서 시작합니다$n원래 쿼리 텍스트의 매개 변수 또는$ 1없는 경우. 어떤 경우에는이 번호에 영향을 미치는 숨겨진 매개 변수 기호가있을 수 있습니다. 예를 들어,pl/pgsql숨겨진 매개 변수 기호를 사용하여 함수 로컬 변수의 값을 쿼리에 삽입하여 Apl/pgsql문장J에 i + 1을 선택하십시오와 같은 대표 텍스트가 있습니다.선택 i + $ 2.

대표 쿼리 텍스트는 외부 디스크 파일로 유지되며 공유 메모리를 소비하지 않습니다. 따라서 매우 긴 쿼리 텍스트조차도 성공적으로 저장할 수 있습니다. 그러나 많은 긴 쿼리 텍스트가 축적되면 외부 파일이 무의식적으로 커질 수 있습니다. 그런 경우 복구 방법으로범퍼카 토토쿼리 텍스트를 버릴 수 있습니다.범퍼카 토토보기가 표시됩니다쿼리필드, 각각의 통계는 각각QueryId보존됩니다. 이런 일이 발생하면 감소를 고려하십시오범퍼카 토토.max재발을 방지하기 위해.

F.30.2. 기능

범퍼카 토토_RESET () 반환 void

범퍼카 토토_reset지금까지 수집 한 모든 통계 폐기범퍼카 토토. 기본적 으로이 기능은 슈퍼 사용자 만 실행할 수 있습니다.

범퍼카 토토 (ShowText Boolean) 레코드를 반환

the범퍼카 토토보기가 지명 된 함수의 관점에서 정의됩니다범퍼카 토토. 고객이 전화를 걸 수 있습니다범퍼카 토토직접 기능하고 지정하여showtext : = false쿼리 텍스트를 생략하십시오 (즉,out보기에 해당하는 인수쿼리열이 널을 반환합니다). 이 기능은 불확실한 길이의 쿼리 텍스트를 반복적으로 검색하는 오버 헤드를 피할 수있는 외부 도구를 지원하기위한 것입니다. 이러한 도구는 대신 각 항목 자체에 대해 관찰 된 첫 번째 쿼리 텍스트를 캐시 할 수 있습니다.범퍼카 토토자체는 필요에 따라 쿼리 텍스트를 검색합니다. 서버는 파일에 쿼리 텍스트를 저장하기 때문에이 접근법은 물리적 I/O를 반복적으로 조사하기 위해를 줄일 수 있습니다.범퍼카 토토데이터.

F.30.3. 구성 매개 변수

범퍼카 토토.max(Integer)

범퍼카 토토.max는 모듈에서 추적하는 최대 명령문 수입니다 (즉,의 최대 행 수범퍼카 토토보기). 그보다 더 뚜렷한 진술이 관찰되면, 가장 잘 수행되지 않은 진술에 대한 정보는 폐기됩니다. 기본값은 5000입니다.이 매개 변수는 서버 시작시에만 설정할 수 있습니다.

범퍼카 토토.track(enum)

범퍼카 토토.track모듈에 의해 계산되는 진술을 제어합니다. 지정TOP최상위 진술을 추적하려면 (클라이언트가 직접 발행 한 것),all중첩 된 진술 (예 : 함수 내에서 호출 된 진술) 또는를 추적하려면없음명령문 통계 수집을 비활성화하려면. 기본값은입니다.TOP. 수퍼 유저만이 설정을 변경할 수 있습니다.

범퍼카 토토.track_utility(부울)

범퍼카 토토.track_utility모듈에서 유틸리티 명령을 추적하는지 여부를 제어합니다. 유틸리티 명령은 이외의 모든 명령입니다.select, 삽입, 업데이트and삭제. 기본값은입니다.on. 수퍼 유저만이 설정을 변경할 수 있습니다.

범퍼카 토토.save(부울)

범퍼카 토토.save서버 종료에서 명령문 통계를 저장할지 여부를 지정합니다. 경우OFF그러면 통계는 종료시 저장되지 않거나 서버 시작시 다시로드되지 않습니다. 기본값은입니다.on. 이 매개 변수는에서만 설정할 수 있습니다.postgresql.conf파일 또는 서버 명령 줄에.

모듈은에 비례하는 추가 공유 메모리가 필요합니다.범퍼카 토토.max. 이 메모리는 모듈이로드 될 때마다 소비됩니다.범퍼카 토토.track로 설정되었습니다없음.

이 매개 변수를 설정해야합니다postgresql.conf. 일반적인 사용법은 다음과 같습니다.

# postgresql.conf
shared_preload_libraries = '범퍼카 토토'

범퍼카 토토.max = 10000
범퍼카 토토.track = all

F.30.4. 샘플 출력

벤치 =# 선택 범퍼카 토토_reset ();

$ pgbench -i 벤치
$ PGBENCH -C10 -T300 벤치

벤치 =# \ x
벤치 =# 선택 쿼리, 통화, Total_Time, 행, 100.0 * shared_blks_hit /
               nullif (shared_blks_hit + shared_blks_read, 0) hit_percent
          PG_STAT_STATEMENTS에서 TOTAL_TIME DESC LIMIT 5에 의한 순서 5;
-[레코드 1] ----------------------------------------------------------------------
쿼리 | pgbench_branches 업데이트 bbalance = bbalance + $ 1 여기서 bid = $ 2;
전화 | 3000
Total_Time | 9609.00100000002
줄 | 2836
hit_percent | 99.9778970000200936
-[레코드 2] -------------------------------------------------------------------------------
쿼리 | PGBENCH_TELLERS 업데이트 TBALANCE = TBALANCE + $ 1 여기서 tid = $ 2;
전화 | 3000
Total_Time | 8015.156
줄 | 2990
hit_percent | 99.9731126579631345
-[레코드 3] ---------------------------------------------------------------------
쿼리 | stdin에서 pgbench_accounts를 복사하십시오
전화 | 1
Total_Time | 310.624
줄 | 100000
hit_percent | 0.30395136778115501520
-[레코드 4] -------------------------------------------------------------------------------
쿼리 | PGBENCH_ACCOUNTS 업데이트 세트 Abalance = Abalance + $ 1 여기서 AID = $ 2;
전화 | 3000
Total_Time | 271.74199999997
줄 | 3000
hit_percent | 93.7968855088209426
-[레코드 5] -------------------------------------------------------------------------------
쿼리 | ALTER TABLE PGBENCH_ACCOUTTS 기본 키 추가 (AID)
전화 | 1
Total_Time | 81.42
줄 | 0
hit_percent | 34.4947735191637631

F.30.5. 저자

Takahiro Itagaki. Peter Geoghegan에 의해 추가 된 쿼리 정규화.