이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다토토 사이트 추천 사이트 순위 PostgreSQL : 문서 : 17 : 27.5. 동적 추적버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

27.4. 동적 추적

PostgreSQL시설 제공 데이터베이스 서버의 동적 추적을 지원합니다. 이것은 허용합니다 코드의 특정 지점에서 호출되는 외부 유틸리티 및 따라서 추적 실행.

다수의 토토 사이트 추천 또는 추적 지점이 이미 소스 코드. 이 토토 사이트 추천는 데이터베이스에서 사용하기위한 것입니다 개발자 및 관리자. 기본적으로 토토 사이트 추천는 그렇지 않습니다 편집PostgreSQL; 사용자 토토 사이트 추천를 만들려면 스크립트 구성을 명시 적으로 알려야합니다. 사용 가능.

현재,dtrace유틸리티가 지원됩니다 이 글에서 Solaris, Mac OS X, FreeBSD에서 구할 수 있습니다. NetBsd 및 Oracle Linux. 그만큼SystemTapLinux의 프로젝트는 dtrace에 해당하는 것을 제공하며 사용된. 다른 동적 추적 유틸리티를 지원하는 것은 이론적으로입니다 매크로에 대한 정의를 변경하여 가능src/include/utils/probes.h.

27.4.1. 다이나믹을위한 컴파일 트레이싱

기본적으로 토토 사이트 추천를 사용할 수 없으므로 토토 사이트 추천를 사용할 수 있도록 구성 스크립트 구성을 명시 적으로 알려주십시오. 안에postgresql. dtrace를 포함합니다 지원 지정-enable-dtraceto 구성. 보다PostgreSQL : 문서 : 9.3 : 윈 토토 절차자세한 내용은

27.4.2. 내장 토토 사이트 추천

소스 코드에 여러 표준 토토 사이트 추천가 제공됩니다. 표시표 27-15;표 27-16쇼 토토 사이트 추천에 사용 된 유형. 더 많은 토토 사이트 추천를 확실히 추가 할 수 있습니다 향상시키다PostgreSQL's 관찰 가능성.

표 27-15. 내장 DTRACE 토토 사이트 추천

이름 매개 변수 설명
Transaction-Start (LocalTransactionID) 새로운 거래 시작시 발사되는 토토 사이트 추천. Arg0은입니다 거래 ID.
Transaction-Commit (LocalTransactionID) 거래가 성공적으로 완료되면 발사되는 토토 사이트 추천. Arg0은 트랜잭션 ID입니다.
Transaction-Abort (LocalTransactionID) 트랜잭션이 실패 할 때 발생하는 토토 사이트 추천. Arg0은 트랜잭션 ID입니다.
Query-Start (const char *) 쿼리 처리가 시작될 때 발사되는 토토 사이트 추천. arg0은 쿼리 문자열입니다.
Query-done (const char *) 쿼리 처리가 완료되면 발사되는 토토 사이트 추천. arg0은 쿼리 문자열입니다.
query-parse-start (const char *) 쿼리 구문 분석이 시작될 때 발사되는 토토 사이트 추천. Arg0 쿼리 문자열입니다.
Query-Parse-done (const char *) 쿼리의 구문 분석이 완료되면 발사되는 토토 사이트 추천. Arg0 쿼리 문자열입니다.
Query-Lewrite-Start (const char *) 쿼리 재 작성이 시작될 때 발사되는 토토 사이트 추천. Arg0 쿼리 문자열입니다.
Query-Lewrite-done (const char *) 쿼리 재 작성이 완료되면 발사되는 토토 사이트 추천. arg0은 쿼리 문자열입니다.
쿼리-플랜 스타트 () 쿼리 계획이 시작될 때 발사되는 토토 사이트 추천.
Query-Plan-done () 쿼리 계획이 완료되면 발사되는 토토 사이트 추천.
Query-Execute-Start () 쿼리 실행이 시작될 때 발사되는 토토 사이트 추천.
Query-Execute-Done () 쿼리 실행이있을 때 발생하는 토토 사이트 추천 완벽한.
State-Status (const char *) 서버 프로세스가 업데이트 될 때마다 발사되는 토토 사이트 추천pg_stat_activity.상태. Arg0은 새로운 상태 문자열입니다.
Checkpoint-Start (int) 체크 포인트가 시작될 때 발사되는 토토 사이트 추천. Arg0을 보유합니다 다른 체크 포인트 유형을 구별하는 데 사용되는 비트 타이어 플래그 셧다운, 즉각 또는 힘으로.
Checkpoint-done (int, int, int, int, int) 체크 포인트가 완료되면 발사되는 토토 사이트 추천. (토토 사이트 추천 체크 포인트 처리 중에 다음 화재를 순서대로 나열했습니다.) Arg0은 작성된 버퍼 수. Arg1은 총 버퍼의 총 수입니다. Arg2, Arg3 및 Arg4는 추가 된 XLOG 파일의 수를 포함합니다. 각각 제거 및 재활용.
Clog-Checkpoint-Start (bool) 체크 포인트의 막힘 부분이있을 때 발사되는 토토 사이트 추천 시작. Arg0은 정상 체크 포인트에 대해서도 마찬가지입니다 검문소.
Clog-Checkpoint-Done (bool) 체크 포인트의 막힘 부분이있을 때 발사되는 토토 사이트 추천 완벽한. Arg0은 동일한 의미를 갖습니다 막힘 체크 포인트 스타트.
서브 트랜스 체크 포인트 스타트 (bool) 체크 포인트의 서브 트랜스 부분이있을 때 발사되는 토토 사이트 추천 시작. Arg0은 정상 체크 포인트에 대해서도 마찬가지입니다 검문소.
서브 트랜스-체크 포인트 도네 (bool) 체크 포인트의 서브 트랜스 부분이있을 때 발생하는 토토 사이트 추천 완벽한. Arg0은 동일한 의미를 갖습니다 서브 트랜스 체크 포인트 시작.
Multixact-Checkpoint-Start (bool) 체크 포인트의 다단계 부분이있을 때 발사되는 토토 사이트 추천 시작. Arg0은 정상 체크 포인트에 대해서도 마찬가지입니다 검문소.
Multixact-Checkpoint-Done (bool) 체크 포인트의 다단계 부분이있을 때 발사되는 토토 사이트 추천 완벽한. Arg0은 동일한 의미를 갖습니다 Multixact-Checkpoint-Start.
Buffer-Checkpoint-Start (int) a의 버퍼 작성 부분이 발생할 때 발사되는 토토 사이트 추천 체크 포인트가 시작되었습니다. Arg0은 예전 비트 플래그를 보유합니다 셧다운과 같은 다른 체크 포인트 유형을 즉시 구별합니다 또는 힘.
Buffer-Sync-Start (int, int) 더러운 버퍼를 쓰기 시작할 때 발사되는 토토 사이트 추천 체크 포인트 (어떤 버퍼를 작성 해야하는지 식별 한 후). Arg0 총 버퍼 수입니다. Arg1은 숫자입니다 현재 더럽고 쓸 필요가 있습니다.
Buffer-Sync-Written (int) 각 버퍼가 쓰여진 후 발사되는 토토 사이트 추천 검문소. Arg0은 버퍼의 ID 번호입니다.
Buffer-Sync-Done (int, int, int) 모든 더러운 버퍼가 작성되었을 때 발사되는 토토 사이트 추천. Arg0 총 버퍼 수입니다. Arg1은 버퍼의 수입니다 실제로 체크 포인트 프로세스에 의해 작성되었습니다. Arg2는 그 숫자입니다 작성 될 것으로 예상되었다 (버퍼-동시-시작의 Arg1); 어느 차이는 다른 프로세스를 반영합니다 검문소.
Buffer-Checkpoint-Sync-Start () 더러운 버퍼가 기록 된 후 발사되는 토토 사이트 추천 커널, fsync 요청을 시작하기 전에.
버퍼-체크 포인트 도네 () 버퍼를 디스크에 동기화 할 때 발생하는 토토 사이트 추천 완벽한.
Twophase-Checkpoint-Start () 체크 포인트의 2 상 부분이 시작.
Twophase-Checkpoint-Done () 체크 포인트의 2 상 부분이 완벽한.
버퍼 읽기 시작 (Forknumber, BlockNumber, OID, OID, OID, Int, BOOL) 버퍼 읽기가 시작될 때 발사되는 토토 사이트 추천. Arg0 및 Arg1 페이지의 포크와 블록 번호를 포함합니다 (그러나 Arg1은 -1입니다. 이것이 관계 확장 요청 인 경우). Arg2, Arg3 및 Arg4 식별하는 테이블 스페이스, 데이터베이스 및 관계 OID를 포함합니다 관계. Arg5는 임시를 생성 한 백엔드의 ID입니다. 로컬 버퍼의 관계 또는 공유에 대한 InvalidBackendId (-1) 완충기. arg6은 관계 확장 요청에 대해 true입니다. 정상 읽기.
버퍼 읽기 도네 (Fornumber, BlockNumber, OID, OID, OID, Int, BOOL, BOOL) 버퍼 읽기가 완료되면 발사되는 토토 사이트 추천. Arg0 및 Arg1 페이지의 포크와 블록 번호를 포함합니다 (이것이 관계 확장 요청, Arg1은 이제 블록 번호를 포함합니다. 새로 추가 된 블록). Arg2, arg3 및 arg4는 테이블 스페이스, 데이터베이스 및 관계를 식별하는 관계 OID. Arg5는 임시 관계를 생성 한 백엔드의 ID입니다. 로컬 버퍼 또는 공유 버퍼의 경우 InvalidbackendId (-1)의 경우. arg6은 관계 확장 요청에 대해 참입니다. 읽다. 버퍼가 수영장에서 발견되면 Arg7이 사실입니다. 아니다.
버퍼-플러시 시작 (Forknumber, BlockNumber, OID, OID, OID) 공유에 대한 쓰기 요청을 발행하기 전에 발사되는 토토 사이트 추천 완충기. Arg0 및 Arg1에는 포크 및 블록 번호가 포함됩니다. 페이지. Arg2, Arg3 및 Arg4에는 테이블 스페이스, 데이터베이스 및가 ​​포함되어 있습니다 관계를 식별하는 관계 OID.
버퍼 플러시 도네 (Fornumber, BlockNumber, OID, OID, OID) 쓰기 요청이 완료되면 발사되는 토토 사이트 추천. (그 점에 유의하십시오 이것은 단지 데이터를 커널로 전달할 시간을 반영합니다. 그것은 일반적으로 실제로 디스크에 작성되지 않았습니다.) 인수는 다음과 같습니다. 버퍼 플러시 시작과 동일합니다.
버퍼-쓰레기-디르티티 스타트 (포트, 블록 덤프, OID, OID, OID) 서버 프로세스가 더러운 쓰기를 시작할 때 발사되는 토토 사이트 추천 완충기. (이런 일이 자주 발생하면shared_buffers너무 작거나 BGWriter 제어 매개 변수는 조정이 필요합니다.) Arg0 및 Arg1에는 페이지의 포크 및 블록 번호가 포함되어 있습니다. arg2, Arg3 및 Arg4에는 테이블 스페이스, 데이터베이스 및 관계 OID가 포함됩니다. 관계 식별.
Buffer-Write-Dirty-done (Forknumber, BlockNumber, OID, OID, OID) 더러운 버퍼 쓰기가 완료되면 발사되는 토토 사이트 추천. 그만큼 인수는 버퍼-쓰레기-디르티티 스타트와 동일합니다.
Wal-Buffer-Write-Dirty-Start () 서버 프로세스가 더러운 쓰기를 시작할 때 발생하는 토토 사이트 추천 더 이상 WAL 버퍼 공간을 사용할 수 없기 때문에 WAL 버퍼. (이 경우 자주 발생하면Wal_buffers도 마찬가지입니다 작은.)
Wal-Buffer-Write-Dirty-done () 더러운 월 버퍼 쓰기가있을 때 발사되는 토토 사이트 추천 완벽한.
xlog-insert (서명되지 않은 문자, 부호없는 문자) WAL 레코드가 삽입 될 때 발사되는 토토 사이트 추천. Arg0은입니다 레코드의 리소스 관리자 (RMID). ARG1에는 정보가 포함되어 있습니다 깃발.
xlog-switch () WAL 세그먼트 스위치가 요청 될 때 발생하는 토토 사이트 추천.
smgr-md-Read-Start (Forknumber, BlockNumber, OID, OID, OID, Int) 관계. Arg0 및 Arg1에는 포크 및 블록 번호가 포함됩니다. 페이지. Arg2, Arg3 및 Arg4에는 테이블 스페이스, 데이터베이스 및가 ​​포함되어 있습니다 관계를 식별하는 관계 OID. Arg5는 ID입니다 로컬 버퍼의 임시 관계를 만든 백엔드 공유 버퍼의 invalidbackendid (-1).
smgr-md-Read-done (Forknumber, BlockNumber, OID, OID, OID, Int, Int, int) 블록 읽기가 완료되면 발사되는 토토 사이트 추천. Arg0 및 Arg1 페이지의 포크 및 블록 번호를 포함합니다. Arg2, Arg3 및 ARG4에는 테이블 스페이스, 데이터베이스 및 관계 OID가 포함되어 있습니다 관계를 식별합니다. Arg5는 백엔드의 ID입니다 로컬 버퍼의 임시 관계를 생성했습니다 공유 버퍼의 경우 invalidbackendid (-1). Arg6은 수입니다 바이트는 실제로 읽는 반면 arg7은 요청한 숫자입니다 (이 경우 다르므로 문제를 나타냅니다).
SMGR-MD-WRITE- 시작 (Forknumber, BlockNumber, OID, OID, OID, Int) 관계에 블록을 쓰기 시작할 때 발사되는 토토 사이트 추천. Arg0 및 Arg1에는 페이지의 포크 및 블록 번호가 포함되어 있습니다. arg2, Arg3 및 Arg4에는 테이블 스페이스, 데이터베이스 및 관계 OID가 포함됩니다. 관계를 식별합니다. Arg5는 백엔드의 ID입니다 로컬 버퍼의 임시 관계를 생성했습니다 공유 버퍼의 invalidbackendid (-1).
SMGR-MD-WRITE-DONE (Forknumber, BlockNumber, OID, OID, OID, Int, Int, Int) 블록 쓰기가 완료되면 발사되는 토토 사이트 추천. Arg0 및 Arg1 페이지의 포크 및 블록 번호를 포함합니다. Arg2, Arg3 및 ARG4에는 테이블 스페이스, 데이터베이스 및 관계 OID가 포함되어 있습니다 관계를 식별합니다. Arg5는 백엔드의 ID입니다 로컬 버퍼의 임시 관계를 생성했습니다 공유 버퍼의 경우 invalidbackendid (-1). Arg6은 수입니다 바이트는 실제로 작성된 반면 arg7은 요청 된 번호입니다 (if. 이것들은 다르고 문제를 나타냅니다.
Sort-Start (int, bool, int, int, bool) 정렬 작업이 시작될 때 발사되는 토토 사이트 추천. Arg0 힙, 인덱스 또는 데이텀 정렬을 나타냅니다. Arg1은 고유 한 가치에 맞습니다 시행. Arg2는 키 열의 수입니다. arg3은 숫자입니다 킬로바이트의 작업 메모리가 허용됩니다. 무작위로 액세스하면 Arg4가 사실입니다 정렬 결과가 필요합니다.
Sort-Done (bool, long) 정렬이 완료되면 발사되는 토토 사이트 추천. Arg0은 사실입니다 외부 정렬, 내부 정렬에 대한 거짓. Arg1은 디스크 수입니다 외부 종류 또는 킬로바이트의 메모리에 사용되는 블록 내부 정렬.
lwlock-acquire (lwlockid, lwlockmode) LWLOCK을 인수했을 때 발사되는 토토 사이트 추천. Arg0은입니다 LWLOCK의 ID. Arg1은 요청 된 잠금 모드 (독점 또는)입니다 공유.
LWLOCK-RELEASE (lwlockid) LWLOCK가 릴리스되었을 때 발사되는 토토 사이트 추천 (그러나 참고 석방 된 웨이터는 아직 깨어나지 않았다). Arg0은입니다 LWLOCK 's ID.
LWLOCK-WAIT-Start (lwlockid, lwlockmode) LWLOCK을 즉시 사용할 수 없을 때 발사되는 토토 사이트 추천 그리고 서버 프로세스가 잠금이 될 때까지 기다리기 시작했습니다. 사용 가능. Arg0은 LWLOCK의 ID입니다. Arg1은 요청 된 잠금 장치입니다 독점 또는 공유 모드.
LWLOCK-WAIT-DONE (lwlockid, lwlockmode) 서버 프로세스가 해제되었을 때 발생하는 토토 사이트 추천 LWLOCK을 기다립니다 (실제로 잠금 장치는 없습니다). Arg0은 LWLOCK의 ID입니다. Arg1은 요청 된 잠금 모드입니다 독점 또는 공유.
lwlock-condacquire (lwlockid, lwlockmode) LWLOCK을 성공적으로 획득했을 때 발사되는 토토 사이트 추천 발신자는 대기 중이 아닙니다. Arg0은 LWLOCK의 ID입니다. arg1입니다 요청 된 잠금 모드, 독점 또는 공유.
LWLOCK-CONDACQUIRE-FAIL (lwlockid, lwlockmode) LWLOCK을 성공적으로 인수하지 않았을 때 발사되는 토토 사이트 추천 발신자가 대기하지 않으면. Arg0은 LWLOCK의 ID입니다. arg1 요청 된 잠금 모드는 독점적이거나 공유됩니다.
Lock-Wait-Start 서명되지 않은 int, lockmode) 헤비급 잠금 요청에 따라 발사되는 토토 사이트 추천 (LMGR 자물쇠)가 잠금을 사용할 수 없기 때문에 대기하기 시작했습니다. Arg0 Arg3을 통해 객체를 식별하는 태그 필드입니다. 잠겨 있습니다. ARG4는 잠긴 물체의 유형을 나타냅니다. arg5 요청이있는 잠금 유형을 나타냅니다.
Lock-Wait-Done 서명되지 않은 int, lockmode) 헤비급 잠금 요청에 따라 발사되는 토토 사이트 추천 (lmgr 잠금)이 대기를 마쳤습니다 (즉, 자물쇠를 획득했습니다). 그만큼 인수는 Lock-Wait-Start와 동일합니다.
교착 상태 () 교착 상태에서 교착 상태를 발견했을 때 발사되는 토토 사이트 추천 탐지기.

표 27-16. 토토 사이트 추천 매개 변수에 사용 된 정의 유형

타입 정의
LocalTransactionID 서명되지 않은 int
lwlockid int
lwlockmode int
Lockmode int
BlockNumber 부호없는 int
OID 서명되지 않은 int
Forknumber int
bool char

27.4.3. 토토 사이트 추천 사용

아래 예제는 분석을위한 dtrace 스크립트를 보여줍니다 스냅 샷의 대안으로 시스템의 트랜잭션 계산PG_STAT_DATABASE전과 후에 성능 테스트 :

#!/usr/sbin/dtrace -qs

Postgresql $ 1 ::: 트랜잭션 시작

      @start [ "start"] = count ();
      자기 TS = 타임 스탬프;

Postgresql $ 1 ::: Transaction-Abort

      @abort [ "abort"] = count ();

Postgresql $ 1 ::: Transaction-Commit
/self ts/

      @commit [ "commit"] = count ();
      @Time [ "총 시간 (ns)"] = sum (timestamp- self ts);
      자기 TS = 0;

실행되면 예제 D 스크립트는 다음과 같은 출력을 제공합니다.

# ./txn_count.d` pgrep -n postgres` 또는 ./txn_count.d <pid
^c

시작 71
커밋 70
총 시간 (NS) 2312105013

참고 :SystemTap은 추적에 대해 다른 표기법을 사용합니다 기본 추적 지점이 있지만 DTRACE보다 스크립트 호환됩니다. 주목할 가치가있는 한 가지 요점은이 글에서 SystemTap 스크립트는 Double을 사용하여 토토 사이트 추천 이름을 참조해야합니다 하이픈 대신에 밑줄. 이것은 고정 될 것으로 예상됩니다 미래의 SystemTap 릴리스.

dtrace 스크립트가 신중하게해야한다는 것을 기억해야합니다. 서면 및 디버깅, 그렇지 않으면 수집 된 추적 정보 의미가 없을 수도 있습니다. 문제가 발견되는 대부분의 경우 기본 시스템이 아닌 잘못된 계측. 동적 추적을 사용하여 발견 된 정보를 논의 할 때 그것을 확인할 수있는 스크립트를 동봉하고 토론.

더 많은 예제 스크립트는 pgfoundry에서 찾을 수 있습니다dtrace 프로젝트.

27.4.4. 새 토토 사이트 추천 정의

새로운 토토 사이트 추천는 개발자가 어디든지 코드 내에서 정의 될 수 있습니다. 욕망은 있지만, 이것은 재 컴파일이 필요합니다. 아래는 다음과 같습니다 새 토토 사이트 추천 삽입 단계 :

  1. 토토 사이트 추천

  2. 토토 사이트 추천 정의 추가SRC/백엔드/utils/probes.d

  3. 포함pg_trace.h그렇지 않은 경우 이미 토토 사이트 추천 포인트를 포함하는 모듈에 존재하고 끼워 넣다trace_postgresql​​매크로를 조사합니다 소스 코드의 원하는 위치

  4. 새로운 토토 사이트 추천를 사용할 수 있는지 확인하고 확인

예 :토토 사이트 추천를 추가하는 방법의 예가 있습니다. 거래 ID에 의해 모든 새로운 거래를 추적하려면

  1. 토토 사이트 추천의 이름이 지정 될 것이라고 결정Transaction-Start유형의 매개 변수가 필요합니다 LocalTransactionID

  2. 토토 사이트 추천 정의 추가SRC/백엔드/utils/probes.d:

    Probe Transaction__Start (localTransactionId);

    토토 사이트 추천 이름의 이중 밑줄을 사용하십시오. a 토토 사이트 추천를 사용한 dtrace 스크립트, 이중 밑줄은 하이픈으로 교체 됨Transaction-Start문서화 할 이름입니다 사용자.

  3. 컴파일 시간에Transaction__startis 이라는 매크로로 변환trace_postgresql_transaction_start(주목하십시오 밑줄은 여기에서 싱글)입니다.pg_trace.h. 매크로 호출을 소스 코드의 적절한 위치. 이 경우 보입니다 다음과 같습니다.

    trace_postgresql_transaction_start (vxid.localtransactionId);
  4. 새 바이너리를 다시 컴파일하고 실행 한 후 다음 dtrace를 실행하여 새로 추가 된 토토 사이트 추천를 사용할 수 있습니다. 명령. 비슷한 출력이 보일 것입니다 :

    # dtrace -ln transaction -start
       ID 제공자 모듈 함수 이름
    18705 PostgreSQL49878 Postgres StartTransactionCommand Transaction-Start
    18755 PostgreSQL49877 Postgres StartTransactionCommand Transaction-Start
    18805 PostgreSQL49876 Postgres StartTransactionCommand Transaction-Start
    18855 PostgreSQL49875 Postgres StartTransactionCommand Transaction-Start
    18986 PostgresQL49873 Postgres StartTransactionCommand Transaction-Start

추적을 추가 할 때 조심해야 할 몇 가지가 있습니다. C 코드에 대한 매크로 :

  • 토토 사이트 추천에 지정된 데이터 유형을 조심해야합니다. 매개 변수는 매크로에 사용 된 변수의 데이터 유형과 일치합니다. 그렇지 않으면 컴파일 오류가 발생합니다.

  • 대부분의 플랫폼에서PostgreSQL-enable-dtrace, 추적 매크로에 대한 논쟁 Control이 거시를 통과 할 때마다 평가됩니다.추적이 없더라도 완료. 이것은 일반적으로 당신이 있는지 걱정할 가치가 없습니다. 몇 가지 로컬 변수의 값을보고합니다. 그러나 조심하십시오 값 비싼 함수를 인수에 넣습니다. 필요한 경우 그렇게하십시오. 수표로 매크로를 보호하여 추적은 실제로 활성화되어 있습니다 :

    if (trace_postgresql_transaction_start_enabled ())
        trace_postgresql_transaction_start (some_function (...));

    각 트레이스 매크로는 해당입니다.활성화매크로.