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

F.29. 토토 핫

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

추가하여 모듈을로드해야합니다토토 핫toshared_preload_librariesinpostgresql.conf, 추가 공유 메모리가 필요하기 때문입니다. 이것은 모듈을 추가하거나 제거하기 위해 서버 재시작이 필요하다는 것을 의미합니다.

F.29.1. 그만큼토토 핫보기

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

표 F-22.토토 핫

이름 type 참조 설명
userID OID pg_authid.Oid 진술을 실행 한 사용자의 OID
dbid OID 토토 결과 : 문서 : 9.Oid 명세서가 실행 된 데이터베이스의 OID
QueryId bigint 명령문의 구문 분석 트리에서 계산 된 내부 해시 코드
쿼리 텍스트 대표 성명서의 텍스트
전화 bigint 실행 된 횟수
Total_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 13122_13130 성명서에 의해 더러워진 총 지역 블록의 총 수
local_blks_written bigint 진술에 의해 작성된 총계 블록 수
temp_blks_read bigint 진술서에 의해 읽은 총 임시 블록 수
temp_blks_written bigint 진술에 의해 작성된 총 임시 블록 수
blk_read_time 이중 정밀 성명서가 블록을 읽는 데 소비 된 총 시간 (iftrack_io_timing활성화되어 있고 그렇지 않으면 Zero)
blk_write_time 이중 정밀 성명서가 블록을 쓰는 데 소비 된 총 시간 (iftrack_io_timing활성화되어 있습니다. 그렇지 않으면 Zero)

이보기 및 기능토토 핫_resetand토토 핫, 데이터베이스에서만 사용할 수 있습니다.토토 핫확장. 그러나 통계는 될 때마다 서버의 모든 데이터베이스에서 추적됩니다.토토 핫모듈은보기의 존재에 관계없이 서버에로드됩니다.

보안상의 이유로, 비 슈퍼 사용자는 SQL 텍스트를 볼 수 없습니다.QueryId다른 사용자가 실행 한 쿼리. 그러나 뷰가 데이터베이스에 설치된 경우 통계를 볼 수 있습니다.

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

쿼리를 다른 쿼리와 일치시키기 위해 상수의 값이 무시되면 상수가 대체됩니다?in토토 핫디스플레이. 나머지 쿼리 텍스트는 특정 쿼리의 쿼리입니다.QueryId토토 핫Entry.

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

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

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

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

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

F.29.2. 기능

토토 핫_RESET () 반환 void

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

토토 핫 (ShowText Boolean) 레코드를 반환

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

F.29.3. 구성 매개 변수

토토 핫.max(정수)

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

토토 핫.track(enum)

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

토토 핫.track_utility(부울)

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

토토 핫.save(부울)

토토 핫.save서버 종료에서 명령문 통계를 저장할지 여부를 지정합니다. 경우OFF23126_23222on. 이 매개 변수는에서만 설정할 수 있습니다.postgresql.conf파일 또는 서버 명령 줄에.

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

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

# postgresql.conf
shared_preload_libraries = '토토 핫'

토토 핫.max = 10000
토토 핫.track = all

F.29.4. 샘플 출력

벤치 =# 선택 PG_STAT_STATEMENTS_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 업데이트 SET BBALANCE = BBALANCE +? 여기서 입찰 =?;
전화 | 3000
Total_Time | 9609.00100000002
줄 | 2836
hit_percent | 99.9778970000200936
-[레코드 2] -------------------------------------------------------------------------------
쿼리 | PGBENCH_TELLERS 업데이트 set tbalance = tbalance +? 여기서 tid =?;
전화 | 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 +? 여기서 AID =?;
전화 | 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.29.5. 저자

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