이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

27.4. 동적 추적

PostgreSQL제공

다수의 윈 토토 또는 추적 지점이 이미 삽입되었습니다.PostgreSQL; 그만큼

현재,dtrace유틸리티가 지원되며 사용 가능합니다SystemTapLinux의 프로젝트는 또한 DTRACE 동등한 것을 제공합니다. 지원src/include/utils/probes.h.

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

기본적으로 윈 토토를 사용할 수 없으므로PostgreSQL. 에게-enable-dtrace구성하려면. 보다섹션 15.4추가

27.4.2. 내장 윈 토토

소스 코드에 여러 표준 프로브가 제공됩니다.표 27-3; 표 27-4윈 토토에 사용 된 유형이 표시됩니다. 더 많은 윈 토토는 확실히 할 수 있습니다PostgreSQL의 관찰 가능성.

표 27-3. 내장 DTRACE 프로브

이름 매개 변수 설명
Transaction-Start (LocalTransactionID) 새로운 거래 시작시 발사되는 윈 토토.
Transaction-Commit (LocalTransactionID) 트랜잭션이 완료되면 발사되는 윈 토토
Transaction-Abort (LocalTransactionID) 트랜잭션이 완료되면 발사되는 윈 토토
쿼리 스타트 (const char *) 쿼리 처리가있을 때 발생하는 윈 토토
Query-done (const char *) 쿼리 처리가있을 때 발생하는 윈 토토
Query-Parse-Start (const char *) 쿼리의 구문 분석이있을 때 발생하는 윈 토토
Query-Parse-done (const char *) 쿼리의 구문 분석이있을 때 발생하는 윈 토토
Query-Lewrite-Start (const char *) 쿼리를 다시 쓰면 발사되는 윈 토토
Query-Lewrite-done (const char *) 쿼리를 다시 쓰면 해고되는 윈 토토
쿼리-플랜 스타트 () 쿼리 계획이있을 때 발생하는 윈 토토
Query-Plan-done () 쿼리 계획이있을 때 발생하는 윈 토토
Query-Execute-Start () 쿼리 실행이있을 때 발생하는 윈 토토
query-execute-done () 쿼리 실행이있을 때 발생하는 윈 토토
Statement-Status (const char *) 서버 프로세스가 업데이트 될 때마다 발사되는 윈 토토pg_stat_activity.current_query상태. Arg0은입니다
Checkpoint-Start (int) 체크 포인트가 시작될 때 발사되는 윈 토토. Arg0
Checkpoint-done (int, int, int, int, int) 체크 포인트가 완료되면 발사되는 윈 토토.
Clog-Checkpoint-Start (bool) 막힘 부분이 a
Clog-Checkpoint-Done (bool) 막힘 부분이 a
서브 트랜스 체크 포인트 스타트 (bool) 서브 트랜스 부분이 a
서브 트랜스-체크 포인트 도네 (bool) 서브 트랜스 부분이 a
Multixact-Checkpoint-Start (bool) a의 다중 공장 부분이있을 때 발사되는 윈 토토
Multixact-Checkpoint-Done (bool) a의 다중 공장 부분이있을 때 발사되는 윈 토토
Buffer-Checkpoint-Start (int) 버퍼 작성 부분이 발생할 때 발사되는 윈 토토
Buffer-Sync-Start (int, int) 더러운 글을 쓰기 시작하면 발사되는 윈 토토
Buffer-Sync-Written (int) 각 버퍼가 작성된 후 발사되는 윈 토토
Buffer-Sync-done (int, int, int) 모든 더러운 버퍼가있을 때 발사되는 윈 토토
Buffer-Checkpoint-Sync-Start () 더러운 버퍼가 발생한 후 발사되는 윈 토토
버퍼-체크 포인트 도네 () 버퍼를 디스크에 동기화 할 때 발생하는 윈 토토
Twophase-Checkpoint-Start () a의 2 상 부분이있을 때 발사되는 윈 토토
Twophase-Checkpoint-Done () a의 2 상 부분이있을 때 발사되는 윈 토토
버퍼 읽기 시작 버퍼 읽기가 시작될 때 발사되는 윈 토토.
버퍼 읽기 도네 버퍼 읽기가 완료되면 발사되는 윈 토토.
버퍼-플러시 시작 (Forknumber, BlockNumber, OID, OID, OID) 쓰기 요청을 발행하기 전에 발사되는 윈 토토
버퍼 플러시 도네 (Forknumber, BlockNumber, OID, OID, OID) 쓰기 요청이 완료되면 발사되는 윈 토토.
버퍼-쓰레기-디르티티 스타트 (Forknumber, BlockNumber, OID, OID, OID) 서버 프로세스가 시작될 때 발사되는 윈 토토shared_buffers너무 작거나 BGWriter 제어 매개 변수가 필요합니다
버퍼-쓰레기-다이틀 핀 (Forknumber, BlockNumber, OID, OID, OID) 더러운 버퍼 쓰기가있을 때 발사되는 윈 토토
Wal-Buffer-Write-Dirty-Start () 서버 프로세스가 시작될 때 발생하는 윈 토토Wal_buffers너무 작습니다.)
Wal-Buffer-Write-Dirty-done () 더러운 월 버퍼 쓰기가있을 때 발사되는 윈 토토
xlog-insert (서명되지 않은 문자, 부호없는 문자) WAL 레코드가 삽입 될 때 발사되는 윈 토토.
xlog-switch () WAL 세그먼트 스위치가 발생할 때 발생하는 윈 토토
SMGR-MD-Read-Start (Fornumber, BlockNumber, OID, OID, OID, Int) 블록을 읽기 시작할 때 발사되는 윈 토토
smgr-md-Read-done 블록 읽기가 완료되면 발사되는 윈 토토.
SMGR-MD-WRITE-Start (Fornumber, BlockNumber, OID, OID, OID, Int) 블록을 쓰기 시작할 때 발사되는 윈 토토
SMGR-MD-WRITE-DONE 블록 쓰기가 완료되면 발사되는 윈 토토.
정렬 시작 (int, bool, int, int, bool) 정렬 작업이 시작될 때 발사되는 윈 토토.
Sort-done (bool, long) 정렬이 완료되면 발사되는 윈 토토. Arg0입니다
LWLOCK-ACQUIRE (lwlockid, lwlockmode) LWLOCK을 인수했을 때 발사되는 윈 토토.
LWLOCK-RELEASE (lwlockid) LWLOCK이 출시 될 때 발사되는 윈 토토
LWLOCK-WAIT-Start (lwlockid, lwlockmode) LWLOCK이 즉시 없을 때 발사되는 윈 토토
LWLOCK-WAIT-DONE (lwlockid, lwlockmode) 서버 프로세스가있을 때 발사되는 윈 토토
lwlock-condacquire (lwlockid, lwlockmode) LWLOCK이 성공적으로 발생했을 때 발사되는 윈 토토
LWLOCK-CONDACQUIRE-FAIL (lwlockid, lwlockmode) LWLOCK이 아닌 경우 발사되는 윈 토토
Lock-Wait-Start (서명되지 않은 int, 부호없는 int, 서명되지 않은 int, 부호없는 헤비급 요청시 발사되는 윈 토토
Lock-Wait-Done (서명되지 않은 int, 부호없는 int, 서명되지 않은 int, 부호없는 헤비급 요청시 발사되는 윈 토토
교착 상태 () 교착 상태가 발견 될 때 발사되는 프로브

표 27-4. 프로브에 사용 된 정의 유형

타입 정의
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

실행되면 예제 D 스크립트는 그러한 출력을 제공합니다

# ./txn_count.d` pgrep -n postgres` 또는 ./txn_count.d 

참고 :SystemTap은 다른 표기법을 사용합니다

dtrace 스크립트가 신중하게해야한다는 것을 기억해야합니다.

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

27.4.4. 새 프로브 정의

새로운 프로브는 어디든지 코드 내에서 정의 될 수 있습니다.

  1. 사용 가능한 프로브 이름 및 데이터 결정

  2. 프로브 정의 추가SRC/백엔드/utils/probes.d

  3. 포함pg_trace.htrace_postgresql

  4. 다시 컴파일하고 새 윈 토토가 있는지 확인하십시오

예 :다음은 다음을 어떻게 추가 할 것인지에 대한 예입니다.

  1. 프로브의 이름이 지정 될 것이라고 결정Transaction-Start매개 변수가 필요합니다

  2. 프로브 정의 추가SRC/백엔드/utils/probes.d:

    Probe Transaction__start (localTransactionId);

    윈 토토의 이중 밑줄 사용에 유의하십시오.Transaction-Start이름입니다

  3. 컴파일 시간에Transaction__start는 매크로로 변환됩니다trace_postgresql_transaction_start(통지pg_trace.h. 추가

    TRACE_POSTGRESQL_TRANSACTION_START (VXID.LOCALTRANSACTIONID);
  4. 새 바이너리를 다시 컴파일하고 실행 한 후 확인하십시오

    # dtrace -ln transaction -start

추적을 추가 할 때 조심해야 할 몇 가지가 있습니다.

  • 당신은 데이터 유형이

  • 대부분의 플랫폼에서 ifPostgreSQL|-enable-dtrace, 추적에 대한 인수아니요. 이것은 일반적으로 가치가 없습니다

    if (trace_postgresql_transaction_start_enabled ())

    각 트레이스 매크로에는 해당활성화매크로.