PostgreSQL제공
다수의 윈 토토 또는 추적 지점이 이미 삽입되었습니다.PostgreSQL; 그만큼
현재,dtrace유틸리티가 지원되며 사용 가능합니다SystemTapLinux의 프로젝트는 또한 DTRACE 동등한 것을 제공합니다. 지원src/include/utils/probes.h.
기본적으로 윈 토토를 사용할 수 없으므로PostgreSQL. 에게-enable-dtrace구성하려면. 보다섹션 15.4추가
소스 코드에 여러 표준 프로브가 제공됩니다.표 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, 부호없는 | 헤비급 요청시 발사되는 윈 토토 |
교착 상태 | () | 교착 상태가 발견 될 때 발사되는 프로브 |
아래 예제는 분석을위한 dtrace 스크립트를 보여줍니다PG_STAT_DATABASE성능 테스트 전후 :
#!/usr/sbin/dtrace -qs
실행되면 예제 D 스크립트는 그러한 출력을 제공합니다
# ./txn_count.d` pgrep -n postgres` 또는 ./txn_count.d
참고 :SystemTap은 다른 표기법을 사용합니다
dtrace 스크립트가 신중하게해야한다는 것을 기억해야합니다.
더 많은 예제 스크립트는 pgfoundry에서 찾을 수 있습니다dtrace.
새로운 프로브는 어디든지 코드 내에서 정의 될 수 있습니다.
사용 가능한 프로브 이름 및 데이터 결정
프로브 정의 추가SRC/백엔드/utils/probes.d
포함pg_trace.htrace_postgresql
다시 컴파일하고 새 윈 토토가 있는지 확인하십시오
예 :다음은 다음을 어떻게 추가 할 것인지에 대한 예입니다.
프로브의 이름이 지정 될 것이라고 결정Transaction-Start매개 변수가 필요합니다
프로브 정의 추가SRC/백엔드/utils/probes.d:
Probe Transaction__start (localTransactionId);
윈 토토의 이중 밑줄 사용에 유의하십시오.Transaction-Start이름입니다
컴파일 시간에Transaction__start는 매크로로 변환됩니다trace_postgresql_transaction_start(통지pg_trace.h. 추가
TRACE_POSTGRESQL_TRANSACTION_START (VXID.LOCALTRANSACTIONID);
새 바이너리를 다시 컴파일하고 실행 한 후 확인하십시오
# dtrace -ln transaction -start
추적을 추가 할 때 조심해야 할 몇 가지가 있습니다.
당신은 데이터 유형이
대부분의 플랫폼에서 ifPostgreSQL|-enable-dtrace, 추적에 대한 인수아니요. 이것은 일반적으로 가치가 없습니다
if (trace_postgresql_transaction_start_enabled ())
각 트레이스 매크로에는 해당활성화매크로.