그토토 사이트모듈은 서버에서 실행되는 모든 SQL 문의 계획 및 실행 통계를 추적하는 수단을 제공합니다.
모듈을 추가하여 로드해야 합니다.토토 사이트에shared_preload_libraries에postgresql.conf, 추가 공유 메모리가 필요하기 때문입니다. 이는 모듈을 추가하거나 제거하려면 서버를 다시 시작해야 함을 의미합니다. 또한 모듈이 활성화되려면 쿼리 식별자 계산이 활성화되어야 하며, 다음과 같은 경우 자동으로 수행됩니다.compute_query_id다음으로 설정됨자동또는켜짐또는 쿼리 식별자를 계산하는 타사 모듈이 로드됩니다.
언제토토 사이트활성화되면 서버의 모든 데이터베이스에 대한 통계를 추적합니다. 이러한 통계에 액세스하고 조작하기 위해 모듈은 뷰를 제공합니다.토토 사이트그리고토토 사이트_info및 유틸리티 함수토토 사이트_reset그리고토토 사이트. 전역적으로 사용할 수는 없지만 특정 데이터베이스에 대해 활성화할 수 있습니다.확장 프로그램 생성 토토 사이트.
토토 사이트보기#모듈에 의해 수집된 통계는 다음 뷰를 통해 제공됩니다.토토 사이트. 이 보기에는 데이터베이스 ID, 사용자 ID, 쿼리 ID의 각 고유 조합과 최상위 명령문인지 여부(모듈이 추적할 수 있는 고유 명령문의 최대 개수까지)에 대해 하나의 행이 포함됩니다. 뷰의 열은 다음과 같습니다.표 F.22.
표 F.22. 토토 사이트열
|
열 유형 설명 |
|---|
|
문을 실행한 사용자의 OID |
|
문이 실행된 데이터베이스의 OID |
|
쿼리가 최상위 명령문으로 실행된 경우 참(항상 참인 경우) |
|
동일한 정규화된 쿼리를 식별하기 위한 해시 코드. |
|
대표 성명서 본문 |
|
문이 계획된 횟수(if |
|
문을 계획하는 데 소요된 총 시간(밀리초 단위)(if |
|
문을 계획하는 데 소요된 최소 시간(밀리초). 다음과 같은 경우 이 필드는 0이 됩니다. |
|
문을 계획하는 데 소요된 최대 시간(밀리초). 다음과 같은 경우 이 필드는 0이 됩니다. |
|
문을 계획하는 데 소요된 평균 시간(밀리초)(if |
|
문을 계획하는 데 소요된 시간의 모집단 표준 편차(밀리초)(if |
|
문이 실행된 횟수 |
|
문을 실행하는 데 소요된 총 시간(밀리초) |
|
문을 실행하는 데 소요된 최소 시간(밀리초)입니다. 이 필드는 재설정이 수행된 후 이 문이 처음 실행될 때까지 0이 됩니다. |
|
문장 실행에 소요된 최대 시간(밀리초), 이 필드는 다음에 의해 재설정된 후 이 문이 처음 실행될 때까지 0이 됩니다. |
|
문을 실행하는 데 소요된 평균 시간(밀리초) |
|
문을 실행하는 데 소요된 시간의 모집단 표준 편차(밀리초) |
|
문에 의해 검색되거나 영향을 받는 총 행 수 |
|
문에 의한 공유 블록 캐시 적중의 총 수 |
|
문이 읽은 공유 블록의 총 개수 |
|
문에 의해 더러워진 공유 블록의 총 수 |
|
문에 의해 작성된 공유 블록의 총 수 |
|
문에 의한 로컬 블록 캐시 적중의 총 수 |
|
문이 읽은 로컬 블록의 총 수 |
|
문에 의해 더러워진 로컬 블록의 총 수 |
|
문에 의해 작성된 총 로컬 블록 수 |
|
문이 읽은 임시 블록의 총 개수 |
|
문에 의해 작성된 총 임시 블록 수 |
|
문이 공유 블록을 읽는 데 소요된 총 시간(밀리초)(iftrack_io_timing활성화됨, 그렇지 않으면 0) |
|
문이 공유 블록을 쓰는 데 소요된 총 시간(밀리초)(iftrack_io_timing활성화됨, 그렇지 않으면 0) |
|
문이 로컬 블록을 읽는 데 소요된 총 시간(밀리초)(iftrack_io_timing활성화됨, 그렇지 않으면 0) |
|
명령문이 로컬 블록을 쓰는 데 소요된 총 시간(밀리초 단위)(iftrack_io_timing활성화됨, 그렇지 않으면 0) |
|
문이 임시 파일 블록을 읽는 데 소요된 총 시간(밀리초 단위)(iftrack_io_timing활성화됨, 그렇지 않으면 0) |
|
문이 임시 파일 블록을 쓰는 데 소요된 총 시간(밀리초 단위)(iftrack_io_timing활성화됨, 그렇지 않으면 0) |
|
문에 의해 생성된 총 WAL 레코드 수 |
|
문에 의해 생성된 WAL 전체 페이지 이미지의 총 수 |
|
명령문에 의해 생성된 WAL의 총량(바이트) |
|
WAL 버퍼가 가득 찬 횟수 |
|
문에 의해 JIT 컴파일된 총 함수 수 |
|
JIT 코드 생성에 대한 명령문에서 소요된 총 시간(밀리초) |
|
함수가 인라인된 횟수 |
|
인라인 함수에 대한 명령문에서 소비한 총 시간(밀리초) |
|
문이 최적화된 횟수 |
|
최적화 명령문에서 소비한 총 시간(밀리초) |
|
코드가 방출된 횟수 |
|
코드 방출에 대한 명령문에서 소비한 총 시간(밀리초) |
|
문에 의해 JIT 컴파일된 튜플 변형 함수의 총 수 |
|
JIT 컴파일 튜플 변형 함수에 대한 명령문에서 소비한 총 시간(밀리초) |
|
실행 예정인 병렬 작업자 수 |
|
실제로 시작된 병렬 작업자 수 |
|
이 명령문에 대한 통계 수집이 시작된 시간 |
|
이 명령문에 대해 최소/최대 통계 수집이 시작된 시간(필드 |
보안상의 이유로 수퍼유저 및 권한이 있는 역할만pg_read_all_stats역할은 SQL 텍스트를 볼 수 있으며쿼리ID다른 사용자가 실행한 쿼리. 그러나 보기가 데이터베이스에 설치된 경우에는 다른 사용자도 통계를 볼 수 있습니다.
계획 가능한 쿼리(즉,선택, 삽입, 업데이트, 삭제및병합) 및 유틸리티 명령이 단일로 결합됩니다.토토 사이트내부 해시 계산에 따라 동일한 쿼리 구조를 가질 때마다 항목입니다. 일반적으로 두 쿼리는 쿼리에 나타나는 리터럴 상수 값을 제외하고 의미상 동일한 경우 이 목적으로 동일한 것으로 간주됩니다.
상수 교체에 대한 다음 세부정보 및쿼리ID다음 경우에만 적용compute_query_id활성화되었습니다. 계산 대신 외부 모듈을 사용하는 경우쿼리ID, 자세한 내용은 해당 문서를 참조하세요.
쿼리를 다른 쿼리와 일치시키기 위해 상수 값이 무시되면 상수는 다음과 같은 매개변수 기호로 대체됩니다.$1, 에서토토 사이트디스플레이. 쿼리 텍스트의 나머지 부분은 특정쿼리ID다음과 관련된 해시 값토토 사이트항목.
정규화가 적용될 수 있는 쿼리는 상수 값으로 관찰될 수 있습니다.토토 사이트, 특히 항목 할당 취소 비율이 높은 경우. 이런 일이 발생할 가능성을 줄이려면 증가를 고려하세요.토토 사이트.max. 그만큼토토 사이트_info보기, 아래에서 논의됨섹션 F.32.2, 항목 할당 취소에 대한 통계를 제공합니다.
어떤 경우에는 눈에 띄게 다른 텍스트가 포함된 쿼리가 단일로 병합될 수 있습니다.토토 사이트항목; 위에서 설명한 대로 이는 의미상 동일한 쿼리에 대해 발생할 것으로 예상됩니다. 또한 쿼리 간의 유일한 차이점이 상수 목록의 요소 수인 경우 목록은 단일 요소로 압축되지만 주석 처리된 목록 표시기와 함께 표시됩니다.
=# SELECT 토토 사이트_reset(); =# SELECT * FROM 테스트 WHERE IN (1, 2, 3, 4, 5, 6, 7); =# SELECT * FROM 테스트 WHERE IN (1, 2, 3, 4, 5, 6, 7, 8); =# SELECT 쿼리, 토토 사이트에서 호출 WHERE 쿼리 LIKE 'SELECT%'; -[ 기록 1 ]------------------ 쿼리 | SELECT * FROM 테스트 WHERE IN ($1 /*, ... */) 전화 | 2
이러한 경우 외에도 해시 충돌로 인해 관련 없는 쿼리가 하나의 항목으로 병합될 가능성이 적습니다. (단, 다른 사용자나 데이터베이스에 속한 쿼리의 경우에는 이런 일이 발생할 수 없습니다.)
이후쿼리ID해시 값은 쿼리의 구문 분석 후 표현에서 계산됩니다. 반대의 경우도 가능합니다. 동일한 텍스트가 포함된 쿼리가 서로 다른 요소로 인해 다른 의미를 갖는 경우 별도의 항목으로 나타날 수 있습니다.검색_경로설정.
소비자토토 사이트사용하고 싶을 수도 있음쿼리ID(아마도 다음과 결합하여dbid그리고사용자 ID)은 쿼리 텍스트보다 각 항목에 대해 더 안정적이고 신뢰할 수 있는 식별자입니다. 그러나 안정성에 대한 보장은 제한적이라는 점을 이해하는 것이 중요합니다.쿼리ID해시 값. 식별자는 분석 후 트리에서 파생되므로 그 값은 무엇보다도 이 표현에 나타나는 내부 객체 식별자의 함수입니다. 이는 직관에 반하는 의미를 갖습니다. 예를 들어,토토 사이트예를 들어 두 쿼리 실행 사이에 삭제되고 다시 생성된 함수를 참조하는 경우 명백히 동일한 두 쿼리가 서로 다른 쿼리로 간주됩니다. 반대로 쿼리 실행 사이에 테이블이 삭제되고 다시 생성되면 명백히 동일한 두 쿼리가 동일한 것으로 간주될 수 있습니다. 그러나 테이블의 별칭이 유사한 쿼리에 대해 다른 경우 이러한 쿼리는 고유한 것으로 간주됩니다. 해싱 프로세스는 머신 아키텍처와 플랫폼의 다른 측면의 차이에도 민감합니다. 또한 다음과 같이 가정하는 것은 안전하지 않습니다.쿼리ID다음의 주요 버전에서 안정적입니다.PostgreSQL.
물리적 WAL 재생을 기반으로 복제에 참여하는 두 서버는 동일할 것으로 예상할 수 있습니다.쿼리ID동일한 쿼리에 대한 값입니다. 그러나 논리적 복제 체계는 모든 관련 세부 사항에서 복제본을 동일하게 유지한다고 약속하지 않으므로쿼리ID논리적 복제본 집합에 걸쳐 비용을 누적하는 데 유용한 식별자는 아닙니다. 의심스러운 경우 직접 테스트하는 것이 좋습니다.
일반적으로 다음과 같이 가정할 수 있습니다.쿼리ID값은 부 버전 릴리스 간에 안정적입니다.PostgreSQL, 인스턴스가 동일한 머신 아키텍처에서 실행되고 있고 카탈로그 메타데이터 세부정보가 일치하는 경우입니다. 호환성은 최후의 수단으로 부 버전 간에만 중단됩니다.
대표 쿼리 텍스트에서 상수를 대체하는 데 사용되는 매개변수 기호는 가장 높은 다음 숫자부터 시작합니다.$n원래 쿼리 텍스트의 매개변수 또는$1아무것도 없었다면. 어떤 경우에는 이 번호 매기기에 영향을 미치는 숨겨진 매개변수 기호가 있을 수 있다는 점은 주목할 가치가 있습니다. 예를 들어,PL/pgSQL숨겨진 매개변수 기호를 사용하여 함수 로컬 변수의 값을 쿼리에 삽입하므로 aPL/pgSQL다음과 같은 진술SELECT i + 1 INTO j다음과 같은 대표 텍스트가 있을 것입니다.선택 i + $2.
대표 쿼리 텍스트는 외부 디스크 파일에 보관되며 공유 메모리를 소비하지 않습니다. 따라서 매우 긴 쿼리 텍스트도 성공적으로 저장할 수 있습니다. 그러나 긴 쿼리 텍스트가 많이 누적되면 외부 파일이 감당할 수 없을 정도로 커질 수 있습니다. 그런 경우의 회복 방법으로,토토 사이트쿼리 텍스트를 삭제하도록 선택할 수 있으며 그 결과에 있는 모든 기존 항목은토토 사이트보기에 null이 표시됩니다.질의필드(각 필드와 관련된 통계 포함)쿼리ID보존됩니다. 이런 일이 발생하면 줄이는 것을 고려해 보세요.토토 사이트.max재발을 방지하기 위해.
계획그리고호출계획 및 실행 통계는 각 종료 단계에서 성공적인 작업에 대해서만 업데이트되므로 항상 일치할 것으로 예상되는 것은 아닙니다. 예를 들어 문이 성공적으로 계획되었지만 실행 단계에서 실패하는 경우 해당 계획 통계만 업데이트됩니다. 캐시된 계획을 사용하여 계획을 건너뛰면 실행 통계만 업데이트됩니다.
토토 사이트_info보기#통계토토 사이트모듈 자체는 추적되고 이름이 지정된 보기를 통해 사용할 수 있게 됩니다.토토 사이트_info. 이 보기에는 단일 행만 포함되어 있습니다. 뷰의 열은 다음과 같습니다.표 F.23.
표 F.23. 토토 사이트_info열
|
열 유형 설명 |
|---|
|
총 횟수 |
|
모든 통계가 발생하는 시간 |
토토 사이트_reset(userid Oid, dbid Oid, queryid bigint, minmax_only boolean)은 시간대가 포함된 타임스탬프를 반환합니다. 토토 사이트_reset지금까지 수집된 통계를 삭제합니다.토토 사이트지정된 항목에 해당사용자 ID, dbid그리고쿼리ID. 매개변수 중 하나라도 지정되지 않은 경우 기본값은045716_458850(잘못됨), 모든 통계가 삭제됩니다. 모든 통계가토토 사이트뷰가 삭제되면 통계도 재설정됩니다.토토 사이트_info보기. 언제minmax_only이다참최소 및 최대 계획 및 실행 시간 값만 재설정됩니다(예:min_plan_time, max_plan_time, min_exec_time그리고max_exec_time필드). 기본값은minmax_only매개변수는거짓. 마지막으로 수행된 최소/최대 재설정 시간은 다음과 같습니다.minmax_stats_since필드의토토 사이트보기. 이 함수는 재설정 시간을 반환합니다. 이 시간은 다음에 저장됩니다.stats_reset필드토토 사이트_info보기 또는minmax_stats_since필드토토 사이트해당 재설정이 실제로 수행되었는지 확인하세요. 기본적으로 이 기능은 슈퍼유저만 실행할 수 있습니다. 다음을 사용하여 다른 사람에게 액세스 권한을 부여할 수 있습니다.그랜트.
토토 사이트(showtext boolean)는 레코드 세트를 반환합니다. 그토토 사이트뷰는 이름이 지정된 함수로 정의됩니다.토토 사이트. 클라이언트가 다음을 호출하는 것이 가능합니다.토토 사이트직접 기능하고 지정하여표시텍스트 := false쿼리 텍스트를 생략합니다(즉,밖으로뷰에 해당하는 인수질의열은 null을 반환합니다). 이 기능은 불확실한 길이의 쿼리 텍스트를 반복적으로 검색하는 오버헤드를 방지하려는 외부 도구를 지원하기 위한 것입니다. 대신 이러한 도구는 각 항목 자체에 대해 관찰된 첫 번째 쿼리 텍스트를 캐시할 수 있습니다. 그게 전부이기 때문입니다.토토 사이트자체가 수행하고 필요한 경우에만 쿼리 텍스트를 검색합니다. 서버는 쿼리 텍스트를 파일에 저장하므로 이 접근 방식은 반복적인 검사를 위한 물리적 I/O를 줄일 수 있습니다.토토 사이트데이터.
토토 사이트.max (정수) 토토 사이트.max은 모듈이 추적하는 최대 명령문 수입니다(즉,토토 사이트보기). 그보다 더 뚜렷한 문이 관찰되면 가장 적게 실행된 문에 대한 정보가 삭제됩니다. 해당 정보가 삭제된 횟수는에서 확인할 수 있습니다.토토 사이트_info보기. 기본값은 5000입니다. 이 매개변수는 서버 시작 시에만 설정할 수 있습니다.
토토 사이트.track (열거형) 토토 사이트.track모듈이 계산하는 명령문을 제어합니다. 지정하다맨 위로최상위 명세서(클라이언트가 직접 발행한 명세서)를 추적하기 위해,모두또한 중첩된 문(예: 함수 내에서 호출된 문)을 추적하거나없음문 통계 수집을 비활성화합니다. 기본값은맨 위로. 슈퍼유저만 이 설정을 변경할 수 있습니다.
토토 사이트.track_utility (부울) 토토 사이트.track_utility모듈이 유틸리티 명령을 추적하는지 여부를 제어합니다. 유틸리티 명령은 다음을 제외한 모든 명령입니다.선택, 삽입, 업데이트, 삭제및병합. 기본값은켜짐. 슈퍼유저만 이 설정을 변경할 수 있습니다.
토토 사이트.track_planning (부울) 토토 사이트.track_planning모듈에서 계획 작업 및 기간을 추적할지 여부를 제어합니다. 이 매개변수를 활성화하면 눈에 띄는 성능 저하가 발생할 수 있습니다. 특히 동일한 쿼리 구조를 가진 명령문이 소수의 업데이트를 위해 경쟁하는 많은 동시 연결에 의해 실행될 때 더욱 그렇습니다.토토 사이트항목. 기본값은꺼짐. 슈퍼유저만 이 설정을 변경할 수 있습니다.
토토 사이트.save (부울) 토토 사이트.save서버 종료 시 명령문 통계를 저장할지 여부를 지정합니다. 그렇다면꺼짐그러면 통계는 종료 시 저장되지 않으며 서버 시작 시 다시 로드되지 않습니다. 기본값은켜짐. 이 매개변수는에서만 설정할 수 있습니다.postgresql.conf파일 또는 서버 명령줄에서.
모듈에는 다음에 비례하는 추가 공유 메모리가 필요합니다.토토 사이트.max. 이 메모리는 모듈이 로드될 때마다 소비됩니다.토토 사이트.track다음으로 설정됨없음.
이 매개변수는 다음에서 설정되어야 합니다.postgresql.conf. 일반적인 사용법은 다음과 같습니다:
# postgresql.conf shared_preload_libraries = '토토 사이트' Compute_query_id = 켜짐 토토 사이트.max = 10000 토토 사이트.track = 모두
bench=# SELECT 토토 사이트_reset();
$ pgbench -i 벤치
$ pgbench -c10 -t300 벤치
벤치=# \x
벤치=# SELECT 쿼리, 호출, total_exec_time, 행, 100.0 * shared_blks_hit /
nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
토토 사이트 ORDER BY total_exec_time DESC LIMIT 5;
-[ 기록 1 ]---+------------------------------------------------------------
쿼리 | 업데이트 pgbench_branches SET bbalance = bbalance + $1 WHERE bid = $2
전화 | 3000
총_실행_시간 | 25565.855387
행 | 3000
히트_퍼센트 | 100.0000000000000000
-[ 기록 2 ]---+------------------------------------------------------------
쿼리 | 업데이트 pgbench_tellers SET tbalance = tbalance + $1 WHERE tid = $2
전화 | 3000
총_실행_시간 | 20756.669379
행 | 3000
히트_퍼센트 | 100.0000000000000000
-[ 기록 3 ]---+------------------------------------------------------------
쿼리 | stdin에서 pgbench_accounts 복사
전화 | 1
총_실행_시간 | 291.865911
행 | 100000
히트_퍼센트 | 100.0000000000000000
-[ 기록 4 ]---+------------------------------------------------------------
쿼리 | 업데이트 pgbench_accounts SET abalance = abalance + $1 WHERE 지원 = $2
전화 | 3000
총_실행_시간 | 271.232977
행 | 3000
히트_퍼센트 | 98.8454011741682975
-[ 기록 5 ]---+------------------------------------------------------------
쿼리 | 테이블 변경 pgbench_accounts 기본 키 추가(지원)
전화 | 1
총_실행_시간 | 160.588563
행 | 0
히트_퍼센트 | 100.0000000000000000
벤치=# SELECT 토토 사이트_reset(0,0,s.queryid) FROM 토토 사이트 AS s
WHERE s.query = 'pgbench_branches SET 업데이트 bbalance = bbalance + $1 WHERE bid = $2';
벤치=# SELECT 쿼리, 호출, total_exec_time, 행, 100.0 * shared_blks_hit /
nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
토토 사이트 ORDER BY total_exec_time DESC LIMIT 5;
-[ 기록 1 ]---+------------------------------------------------------------
쿼리 | 업데이트 pgbench_tellers SET tbalance = tbalance + $1 WHERE tid = $2
전화 | 3000
총_실행_시간 | 20756.669379
행 | 3000
히트_퍼센트 | 100.0000000000000000
-[ 기록 2 ]---+------------------------------------------------------------
쿼리 | stdin에서 pgbench_accounts 복사
전화 | 1
총_실행_시간 | 291.865911
행 | 100000
히트_퍼센트 | 100.0000000000000000
-[ 기록 3 ]---+------------------------------------------------------------
쿼리 | 업데이트 pgbench_accounts SET abalance = abalance + $1 WHERE 지원 = $2
전화 | 3000
총_실행_시간 | 271.232977
행 | 3000
히트_퍼센트 | 98.8454011741682975
-[ 기록 4 ]---+------------------------------------------------------------
쿼리 | 테이블 변경 pgbench_accounts 기본 키 추가(지원)
전화 | 1
총_실행_시간 | 160.588563
행 | 0
히트_퍼센트 | 100.0000000000000000
-[ 기록 5 ]---+------------------------------------------------------------
쿼리 | 진공 분석 pgbench_accounts
전화 | 1
총_실행_시간 | 136.448116
행 | 0
히트_퍼센트 | 99.9201915403032721
벤치=# SELECT 토토 사이트_reset(0,0,0);
벤치=# SELECT 쿼리, 호출, total_exec_time, 행, 100.0 * shared_blks_hit /
nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
토토 사이트 ORDER BY total_exec_time DESC LIMIT 5;
-[ 기록 1 ]---+-----------------------------------------------------
쿼리 | 토토 사이트_reset(0,0,0) 선택
전화 | 1
총_실행_시간 | 0.189497
행 | 1
히트_퍼센트 |
-[ 기록 2 ]---+---------------------------------------------------------------------
쿼리 | SELECT 쿼리, 호출, total_exec_time, 행, $1 * shared_blks_hit / +
| nullif(shared_blks_hit + shared_blks_read, $2) AS hit_percent+
| 토토 사이트에서 ORDER BY total_exec_time DESC LIMIT $3
전화 | 0
총_실행_시간 | 0
행 | 0
hit_percent |
이타가키 다카히로<itagaki.takahiro@oss.ntt.co.jp. Peter Geoghegan이 추가한 쿼리 정규화<peter@2ndquadrant.com.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.