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

F.29. 토토

토토모듈은 서버에서 실행되는 모든 SQL 문의 실행 통계를 추적하는 수단을 제공합니다.

모듈을 추가하여 로드해야 합니다.토토shared_preload_librariesin토토.conf, 추가 공유 메모리가 필요하기 때문입니다. 이는 모듈을 추가하거나 제거하려면 서버를 다시 시작해야 함을 의미합니다.

언제토토이 로드되면 서버의 모든 데이터베이스에 대한 통계를 추적합니다. 이러한 통계에 액세스하고 조작하기 위해 모듈은 뷰를 제공합니다.토토및 유틸리티 함수토토_reset그리고토토112PostgreSQL: 문서: 11: F.29. 토토28확장 프로그램 생성 토토.

F.29.1. 토토보기

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

표 F.21. 토토

이름 유형 참고자료 설명
사용자 ID oid pg_authid.oid 명령문을 실행한 사용자의 OID
dbid oid pg_database.oid 명령문이 실행된 데이터베이스의 OID
쿼리ID bigint 문의 구문 분석 트리에서 계산된 내부 해시 코드
질의 텍스트 대표 성명서 내용
호출 비긴트 실행 횟수
total_time 배정밀도 문장에서 소요된 총 시간(밀리초)
min_time 배정밀도 문에 소요된 최소 시간(밀리초)
최대_시간 배정밀도 문에서 소요된 최대 시간(밀리초)
평균시간 배정밀도 문장에 소요된 평균 시간(밀리초)
stddev_time 배정밀도 문장에서 소요된 시간의 모집단 표준편차(밀리초)
비긴트 검색된 총 행 수 또는 명령문에 의해 영향을 받은 행 수
shared_blks_hit 비긴트 문에 의한 공유 블록 캐시 적중의 총 수
shared_blks_read 비긴트 문이 읽은 공유 블록의 총 개수
shared_blks_dirtied 비진트 문에 의해 더러워진 공유 블록의 총 수
shared_blks_write 비긴트 문에 의해 작성된 공유 블록의 총 수
local_blks_hit 비긴트 문에 의한 로컬 블록 캐시 적중의 총 수
local_blks_read 비긴트 문이 읽은 로컬 블록의 총 수
local_blks_dirtied bigint 문에 의해 더러워진 로컬 블록의 총 수
local_blks_write 비긴트 문에 의해 작성된 총 로컬 블록 수
temp_blks_read 비긴트 문이 읽은 임시 블록의 총 개수
temp_blks_write 비긴트 문에 의해 작성된 총 임시 블록 수
blk_read_time 배정밀도 문이 블록을 읽는 데 소요된 총 시간(밀리초 단위)(iftrack_io_timing활성화됨, 그렇지 않으면 0)
blk_write_time 배정밀도 명령어가 블록을 쓰는 데 소요된 총 시간(밀리초 단위)(iftrack_io_timing활성화됨, 그렇지 않으면 0)

보안상의 이유로 수퍼유저와 회원만pg_read_all_stats역할은 SQL 텍스트를 볼 수 있으며쿼리ID19750_19883

계획 가능한 쿼리(즉,선택, 삽입, 업데이트삭제)는 단일로 결합됩니다.토토내부 해시 계산에 따라 동일한 쿼리 구조를 가질 때마다 항목입니다. 일반적으로 쿼리에 나타나는 리터럴 상수 값을 제외하고 의미상 동일한 두 쿼리는 이 목적에서 동일한 것으로 간주됩니다. 그러나 유틸리티 명령(즉, 다른 모든 명령)은 텍스트 쿼리 문자열을 기준으로 엄격하게 비교됩니다.

쿼리를 다른 쿼리와 일치시키기 위해 상수 값이 무시되면 상수는 다음과 같은 매개변수 기호로 대체됩니다.$1,에서토토디스플레이. 쿼리 텍스트의 나머지 부분은 특정쿼리ID다음과 관련된 해시 값토토항목.

어떤 경우에는 눈에 띄게 다른 텍스트가 포함된 쿼리가 단일로 병합될 수 있습니다.토토항목. 일반적으로 이는 의미상 동일한 쿼리에 대해서만 발생하지만 해시 충돌로 인해 관련 없는 쿼리가 하나의 항목으로 병합될 가능성이 적습니다. (단, 다른 사용자나 데이터베이스에 속한 쿼리의 경우에는 이런 일이 발생할 수 없습니다.)

이후쿼리ID해시 값은 쿼리의 분석 후 표현에서 계산됩니다. 그 반대도 가능합니다. 동일한 텍스트가 포함된 쿼리가 서로 다른 요소로 인해 다른 의미를 갖는 경우 별도의 항목으로 나타날 수 있습니다.검색_경로설정.

소비자토토사용을 원할 수도 있음쿼리ID(아마도 함께dbid그리고사용자 ID)을 쿼리 텍스트보다 각 항목에 대해 더 안정적이고 신뢰할 수 있는 식별자로 사용합니다. 그러나 안정성에 대한 보장은 제한적이라는 점을 이해하는 것이 중요합니다.쿼리ID해시 값. 식별자는 분석 후 트리에서 파생되므로 그 값은 무엇보다도 이 표현에 나타나는 내부 객체 식별자의 함수입니다. 이는 직관에 반하는 의미를 갖습니다. 예를 들어,토토두 개의 쿼리 실행 사이에 삭제되고 다시 생성된 테이블을 참조하는 경우 두 개의 명백히 동일한 쿼리가 서로 다른 쿼리로 간주됩니다. 해싱 프로세스는 머신 아키텍처와 플랫폼의 다른 측면의 차이에도 민감합니다. 또한 다음과 같이 가정하는 것은 안전하지 않습니다.쿼리ID다음의 주요 버전에서 안정적입니다.포스트그레SQL.

어림짐작으로 볼 때,쿼리ID값은 기본 서버 버전과 카탈로그 메타데이터 세부정보가 정확히 동일하게 유지되는 경우에만 안정적이고 비교할 수 있다고 가정할 수 있습니다. 물리적 WAL 재생을 기반으로 복제에 참여하는 두 서버는 동일할 것으로 예상할 수 있습니다.쿼리ID동일한 쿼리에 대한 값입니다. 그러나 논리적 복제 체계는 모든 관련 세부 사항에서 복제본을 동일하게 유지한다고 약속하지 않으므로쿼리ID논리적 복제본 집합에 걸쳐 비용을 누적하는 데 유용한 식별자는 아닙니다. 의심스러운 경우 직접 테스트하는 것이 좋습니다.

대표 쿼리 텍스트에서 상수를 대체하는 데 사용되는 매개변수 기호는 가장 높은 다음 숫자부터 시작합니다.$n원래 쿼리 텍스트의 매개변수 또는$1아무것도 없었다면. 어떤 경우에는 이 번호 매기기에 영향을 미치는 숨겨진 매개변수 기호가 있을 수 있다는 점은 주목할 가치가 있습니다. 예를 들어,PL/pgSQL숨겨진 매개변수 기호를 사용하여 함수 로컬 변수의 값을 쿼리에 삽입하므로 aPL/pgSQL다음과 같은 진술SELECT i + 1 INTO j다음과 같은 대표 텍스트가 있을 것입니다.선택 i + $2.

대표 쿼리 텍스트는 외부 디스크 파일에 보관되며 공유 메모리를 소모하지 않습니다. 따라서 매우 긴 쿼리 텍스트도 성공적으로 저장할 수 있습니다. 그러나 긴 쿼리 텍스트가 많이 누적되면 외부 파일이 감당할 수 없을 정도로 커질 수 있습니다. 그런 경우의 회복 방법으로,토토쿼리 텍스트를 삭제하도록 선택할 수 있으며 그 결과에 있는 모든 기존 항목은토토보기에는 null이 표시됩니다.질의필드(각 필드와 연관된 통계 포함)쿼리ID보존됩니다. 이런 일이 발생하면 줄이는 것을 고려해 보세요.토토.max재발을 방지하기 위해.

F.29.2. 기능

토토_reset()이 void를 반환함

토토_reset지금까지 수집된 모든 통계를 삭제합니다.토토. 기본적으로 이 기능은 슈퍼유저만 실행할 수 있습니다.

토토(showtext boolean)는 레코드 세트를 반환합니다.

토토view는 이름이 지정된 함수로 정의됩니다.토토. 클라이언트가 다음을 호출하는 것이 가능합니다.토토직접 기능하고 지정하여showtext := false쿼리 텍스트를 생략합니다(즉,아웃뷰에 해당하는 인수질의열은 null을 반환합니다). 이 기능은 불확실한 길이의 쿼리 텍스트를 반복적으로 검색하는 오버헤드를 방지하려는 외부 도구를 지원하기 위한 것입니다. 대신 이러한 도구는 각 항목 자체에 대해 관찰된 첫 번째 쿼리 텍스트를 캐시할 수 있습니다. 그게 전부이기 때문입니다.토토자체가 수행하고 필요한 경우에만 쿼리 텍스트를 검색합니다. 서버는 쿼리 텍스트를 파일에 저장하므로 이 접근 방식은 반복적인 검사를 위한 물리적 I/O를 줄일 수 있습니다.토토데이터.

F.29.3. 구성 매개변수

토토.max (정수)

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

토토.track (열거형)

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

토토.track_utility (부울)

토토.track_utility모듈이 유틸리티 명령을 추적하는지 여부를 제어합니다. 유틸리티 명령은 다음을 제외한 모든 명령입니다.선택, 삽입, 업데이트그리고삭제. 기본값은켜짐. 슈퍼유저만 이 설정을 변경할 수 있습니다.

토토.save (부울)

토토.save서버 종료 시 명령문 통계를 저장할지 여부를 지정합니다. 그렇다면꺼짐그러면 통계는 종료 시 저장되지 않으며 서버 시작 시 다시 로드되지 않습니다. 기본값은켜짐. 이 매개변수는에서만 설정할 수 있습니다.토토.conf파일 또는 서버 명령줄에서.

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

이 매개변수는 다음에서 설정되어야 합니다.토토.conf. 일반적인 사용법은 다음과 같습니다:

# 토토.conf
shared_preload_libraries = '토토'

토토.max = 10000
토토.track = 모두

F.29.4. 샘플 출력

bench=# SELECT 토토_reset();

$ pgbench -i 벤치
$ pgbench -c10 -t300 벤치

벤치=# \x
벤치=# SELECT 쿼리, 호출, total_time, 행, 100.0 * shared_blks_hit /
               nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
          FROM 토토 ORDER BY total_time DESC LIMIT 5;
-[ 기록 1 ]---------------------------------------------------------
쿼리 | 업데이트 pgbench_branches SET bbalance = bbalance + $1 WHERE bid = $2;
전화 | 3000
총_시간 | 9609.00100000002
행 | 2836
히트_퍼센트 | 99.9778970000200936
-[ 기록 2 ]---------------------------------------------------------
쿼리 | 업데이트 pgbench_tellers SET tbalance = tbalance + $1 WHERE tid = $2;
전화 | 3000
총_시간 | 8015.156
행 | 2990
히트_퍼센트 | 99.9731126579631345
-[ 기록 3 ]---------------------------------------------------------
쿼리 | stdin에서 pgbench_accounts 복사
전화 | 1
총_시간 | 310.624
행 | 100000
히트_퍼센트 | 0.30395136778115501520
-[ 기록 4 ]---------------------------------------------------------
쿼리 | 업데이트 pgbench_accounts SET abalance = abalance + $1 WHERE 보조 = $2;
전화 | 3000
총_시간 | 271.741999999997
행 | 3000
히트_퍼센트 | 93.7968855088209426
-[ 기록 5 ]---------------------------------------------------------
쿼리 | 테이블 변경 pgbench_accounts 기본 키 추가(지원)
전화 | 1
총_시간 | 81.42
행 | 0
히트_퍼센트 | 34.4947735191637631

F.29.5. 저자

이타가키 타카히로. Peter Geoghegan이 추가한 쿼리 정규화.