참고:기고자:마시모 달 조토
선택적 파일데이터/배트맨 토토추적을 제어하기 위해 백엔드에서 사용하는 런타임 옵션이 포함되어 있습니다. 메시지 및 기타 백엔드 조정 가능 매개변수. 이 파일을 만드는 이유 흥미로운 점은 다음과 같은 경우 백엔드에서 다시 읽힌다는 것입니다. SIGHUP 신호를 수신하여 런타임 변경이 가능합니다. 다시 시작할 필요 없이 즉시 옵션을 사용할 수 있습니다.포스트그레. 이 파일에 지정된 옵션 추적 패키지에서 사용되는 디버깅 플래그일 수 있습니다(백엔드/utils/misc/trace.c) 또는 숫자 매개변수 백엔드에서 동작을 제어하는 데 사용할 수 있습니다. 새로운 옵션과 매개변수는 다음에서 정의되어야 합니다.백엔드/utils/misc/trace.c그리고백엔드/include/utils/trace.h.
예를 들어 조건부 추적 메시지를 추가한다고 가정해 보겠습니다. 파일의 코드에 대한 조정 가능한 숫자 매개변수foo.c. 우리가 해야 할 일은 상수를 추가하는 것 뿐입니다. TRACE_FOO 및 OPT_FOO_PARAM을백엔드/include/utils/trace.h:
/* 파일 추적.h */
열거형 pg_option_enum
...
TRACE_FOO, /* foo 함수 추적 */
OPT_FOO_PARAM, /* foo 조정 가능 매개변수 */
NUM_배트맨 토토 /* 열거형의 마지막 항목이어야 합니다 */
;및 해당 줄백엔드/utils/misc/trace.c:
/* 파일 추적.c */
정적 문자 *opt_names[] =
...
"foo", /* foo 함수 추적 */
"fooparam" /* foo 조정 가능 매개변수 */
;두 파일의 옵션은 정확히 다음 파일에 지정되어야 합니다.
같은 순서. foo 소스 파일에서 이제 새로운 항목을 참조할 수 있습니다.
다음과 같은 플래그:/* 파일 foo.c */
#include "trace.h"
#foo_param 배트맨 토토 정의[OPT_FOO_PARAM]
정수
foo_function(int x, int y)
TPRINTF(TRACE_FOO, "foo_function 입력 중, foo_param=%d", foo_param);
if (foo_param 10)
do_more_foo(x, y);
비공개 추적 플래그를 사용하는 기존 파일은 다음으로 변경할 수 있습니다. 다음 코드를 추가하기만 하면 됩니다.
#include "trace.h" /* int my_own_flag = 0; -- 제거됨 */ #define my_own_flag 배트맨 토토[OPT_MY_OWN_FLAG]
모든 배트맨 토토는 백엔드 시작 시 0으로 초기화됩니다. 만약 우리가 다른 기본값이 필요합니다. 초기화 코드를 추가해야 합니다. 처음에포스트그레스메인. 이제 우리는 foo_param을 설정하고 값을 기록하여 foo 추적을 활성화할 수 있습니다.데이터/배트맨 토토파일:
# 파일 배트맨 토토 ... foo=1 푸파람=17
새 옵션은 모든 새 백엔드에서 읽혀집니다. 시작되었습니다. 실행 중인 모든 백엔드에 대한 변경 사항을 효과적으로 적용하기 위해 우체국장에게 SIGHUP을 보내야 합니다. 신호는 다음과 같습니다. 자동으로 모든 백엔드로 전송됩니다. 우리는 또한 SIGHUP을 직접 전송하여 특정 백엔드에 대해서만 변경 그것에.
배트맨 토토는 다음과 같이 지정할 수도 있습니다.-T전환포스트그레:
포스트그레옵션-T "verbose=2,query,hostlookup-"
오류 및 디버그 메시지 인쇄에 사용되는 기능은 다음과 같습니다. 이제 다음을 활용하세요.syslog(2)시설. stdout 또는 stderr에 인쇄된 메시지에는 타임스탬프가 앞에 붙습니다. 백엔드 PID도 포함:
#timestamp #pid #메시지 980127.17:52:14.173 [29271] StartTransactionCommand 980127.17:52:14.174 [29271] ProcessUtility: drop table t; 980127.17:52:14.186 [29271] SIIncNumEntries: 테이블이 70% 찼습니다. 980127.17:52:14.186 [29286] Async_NotifyHandler 980127.17:52:14.186 [29286] 잠자는 백엔드 프로세스 깨우기 980127.19:52:14.292 [29286] Async_NotifyFrontEnd 980127.19:52:14.413 [29286] Async_NotifyFrontEnd 완료 980127.19:52:14.466 [29286] Async_NotifyHandler 완료
이 형식은 로그의 가독성을 향상시키고 사람들이 어떤 백엔드가 무엇을, 무엇을 하고 있는지 정확히 이해하기 위해 시간. 또한 간단한 awk 또는 perl 스크립트를 더 쉽게 작성할 수 있습니다. 로그를 모니터링하여 데이터베이스 오류나 문제를 감지하거나 트랜잭션 시간 통계를 계산합니다.
98PostgreSQL: 문서: 7.0: 배트맨 토토11printf()메시지를 표준 출력으로 인쇄하거나 stderr 및 이 출력은 syslog로 리디렉션될 수 없습니다. 그 안에 타임스탬프가 있습니다. printf에 대한 모든 호출은 PRINTF 매크로로 대체되고 stderr로 출력됩니다. 대신 EPRINTF를 사용하도록 변경되어 모든 출력을 제어할 수 있습니다. 균일한 방식으로.
새로운 배트맨 토토 메커니즘은 정의하는 것보다 더 편리합니다. 다음과 같은 이유로 새로운 백엔드 옵션이 전환됩니다.
각 항목마다 다른 스위치를 정의할 필요는 없습니다. 통제하고 싶다. 모든 옵션은 키워드로 정의됩니다. 데이터 디렉터리에 저장된 외부 파일입니다.
다시 시작할 필요는 없습니다포스트그레일부 설정을 변경하려면 옵션. 일반적으로 백엔드 옵션은 postmaster가 시작될 때 각 백엔드로 전달됩니다. 지금 파일에서 읽혀집니다.
백엔드가 실행되는 동안 즉시 옵션을 변경할 수 있습니다. 따라서 디버그를 활성화하여 일부 문제를 조사할 수 있습니다. 문제가 나타날 때만 메시지가 표시됩니다. 우리도 시도해 볼 수 있어요 조정 가능한 매개변수의 값이 다릅니다.
# 댓글 옵션=정수_값# 값 설정옵션 옵션#세트옵션 = 1 옵션+ # 세트옵션 = 1 옵션- # 세트옵션 = 0참고키워드또한 가능합니다 에 정의된 옵션 이름의 약어백엔드/utils/misc/trace.c.
참조관리자 가이드12104_12185
개인 변수 및 옵션을 사용하는 기존 코드 중 일부 배트맨 토토 기능을 사용하도록 스위치가 변경되었습니다. 주로postgres.c. 그럴 것이다 이러한 방식으로 모든 기존 코드를 수정하는 것이 좋습니다. 스위치의 많은 부분을 제거하십시오.포스트그레명령줄을 사용하면 더 많은 것을 가질 수 있습니다 옵션 값을 넣을 고유한 위치가 있는 조정 가능한 옵션입니다.