Postgresql 9.3.25 문서 | ||||
---|---|---|---|---|
메이저 토토 사이트 : 문서 : 9.3 : 잠금보기 | 롤 토토 : 문서 : 9.3 : 데이터베이스 활동 모니터링 | 27 장. 데이터베이스 활동 모니터링 | PostgreSQL : 문서 : 9.3 : 디스크 사용 토토 커뮤니티 |
PostgreSQL시설 제공 데이터베이스 서버의 동적 추적을 지원합니다. 이것은 허용합니다 코드의 특정 지점에서 호출되는 외부 유틸리티 및 따라서 추적 실행.
다수의 토토 사이트 추천 또는 추적 지점이 이미 소스 코드. 이 토토 사이트 추천는 데이터베이스에서 사용하기위한 것입니다 개발자 및 관리자. 기본적으로 토토 사이트 추천는 그렇지 않습니다 편집PostgreSQL; 사용자 토토 사이트 추천를 만들려면 스크립트 구성을 명시 적으로 알려야합니다. 사용 가능.
현재,dtrace유틸리티가 지원됩니다 이 글에서 Solaris, Mac OS X, FreeBSD에서 구할 수 있습니다. NetBsd 및 Oracle Linux. 그만큼SystemTapLinux의 프로젝트는 dtrace에 해당하는 것을 제공하며 사용된. 다른 동적 추적 유틸리티를 지원하는 것은 이론적으로입니다 매크로에 대한 정의를 변경하여 가능src/include/utils/probes.h.
기본적으로 토토 사이트 추천를 사용할 수 없으므로 토토 사이트 추천를 사용할 수 있도록 구성 스크립트 구성을 명시 적으로 알려주십시오. 안에postgresql. dtrace를 포함합니다 지원 지정-enable-dtraceto 구성. 보다PostgreSQL : 문서 : 9.3 : 윈 토토 절차자세한 내용은
소스 코드에 여러 표준 토토 사이트 추천가 제공됩니다. 표시표 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와 동일합니다. |
교착 상태 | () | 교착 상태에서 교착 상태를 발견했을 때 발사되는 토토 사이트 추천 탐지기. |
아래 예제는 분석을위한 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 프로젝트.
새로운 토토 사이트 추천는 개발자가 어디든지 코드 내에서 정의 될 수 있습니다. 욕망은 있지만, 이것은 재 컴파일이 필요합니다. 아래는 다음과 같습니다 새 토토 사이트 추천 삽입 단계 :
토토 사이트 추천
토토 사이트 추천 정의 추가SRC/백엔드/utils/probes.d
포함pg_trace.h그렇지 않은 경우 이미 토토 사이트 추천 포인트를 포함하는 모듈에 존재하고 끼워 넣다trace_postgresql매크로를 조사합니다 소스 코드의 원하는 위치
새로운 토토 사이트 추천를 사용할 수 있는지 확인하고 확인
예 :토토 사이트 추천를 추가하는 방법의 예가 있습니다. 거래 ID에 의해 모든 새로운 거래를 추적하려면
토토 사이트 추천의 이름이 지정 될 것이라고 결정Transaction-Start유형의 매개 변수가 필요합니다 LocalTransactionID
토토 사이트 추천 정의 추가SRC/백엔드/utils/probes.d:
Probe Transaction__Start (localTransactionId);
토토 사이트 추천 이름의 이중 밑줄을 사용하십시오. a 토토 사이트 추천를 사용한 dtrace 스크립트, 이중 밑줄은 하이픈으로 교체 됨Transaction-Start문서화 할 이름입니다 사용자.
컴파일 시간에Transaction__startis 이라는 매크로로 변환trace_postgresql_transaction_start(주목하십시오 밑줄은 여기에서 싱글)입니다.pg_trace.h. 매크로 호출을 소스 코드의 적절한 위치. 이 경우 보입니다 다음과 같습니다.
trace_postgresql_transaction_start (vxid.localtransactionId);
새 바이너리를 다시 컴파일하고 실행 한 후 다음 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 (...));
각 트레이스 매크로는 해당입니다.활성화매크로.