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

62 장. 배트맨 토토

참고 :기여Massimo Dal Zotto

옵션 파일data/배트맨 토토백엔드가 추적을 제어하기 위해 사용하는 런타임 옵션 포함 메시지 및 기타 백엔드 조정 가능한 매개 변수. 이 파일을 만드는 이유 흥미로운 것은 그것이 백엔드에 의해 다시 읽는다는 사실입니다. Sighup 신호를 받으므로 런타임을 변경할 수 있습니다. 다시 시작할 필요없이 즉시 옵션Postgres. 이 파일에 지정된 옵션 Trace 패키지에서 사용하는 플래그 디버깅 (백엔드/utils/misc/trace.c) 또는 숫자 매개 변수 백엔드에서 동작을 제어하기 위해 사용할 수 있습니다. 새로운 옵션 및 매개 변수는에 정의되어야합니다.백엔드/utils/misc/trace.cand백엔드/포함/utils/trace.h.

예를 들어 조건부 추적 메시지를 추가한다고 가정합니다. 파일의 코드에 대한 조정 가능한 숫자 매개 변수foo.c. 우리가해야 할 일은 상수를 추가하는 것입니다. trace_foo 및 opt_foo_param in백엔드/포함/utils/trace.h:

/ * 파일 추적 .h */
enum pg_option_enum 
    ...
    trace_foo, / * trace foo 함수 * /
    opt_foo_param, / * foo tunable 매개 변수 * /

    num_배트맨 토토 / *는 열거의 마지막 항목이어야합니다 * /
;
그리고 해당 라인의백엔드/utils/misc/trace.c:
/ * 파일 trace.c */
정적 char *opt_names [] = 
    ...
    "foo", / * Trace foo 함수 * /
    "fooparam" / * foo tunable 매개 변수 * /
;
두 파일의 옵션은 정확히 같은 순서. Foo 소스 파일에서 이제 새로운 것을 참조 할 수 있습니다. 깃발과 :
/ * 파일 foo.c */
#include "trace.h"
#define foo_param 배트맨 토토 [opt_foo_param]

int
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으로 초기화됩니다. 우리가 다른 기본값이 필요합니다. 일부 초기화 코드를 추가해야합니다. 의 시작시Postgresmain. 이제 우리 foo_param을 설정하고 값을 그만큼data/배트맨 토토파일 :

# 파일 배트맨 토토
...
foo = 1
fooparam = 17

새로운 옵션은 모든 새로운 백엔드에서 읽을 것입니다. 시작. 모든 러닝 백엔드에 대한 변화를 효과적으로 만들기 위해 포스트 마스터에게 잔강을 보내야합니다. 신호가 될 것입니다 모든 백엔드로 자동으로 전송됩니다. 우리는 또한 활성화 할 수 있습니다 Sighup을 직접 보내어 특정 백엔드에 대해서만 변경됩니다. 그것에.

배트맨 토토도와 함께 지정할 수 있습니다.-t스위치Postgres:

Postgres옵션-t "verbose = 2, query, hostlookup-"

인쇄 오류 및 디버그 메시지에 사용되는 기능은 이제를 사용하십시오.Syslog (2)시설. stdout 또는 stderr에 인쇄 된 메시지는 타임 스탬프에 의해 접두사입니다. 백엔드 PID도 포함 :

#timestamp #pid #message
980127.17 : 52 : 14.173 [29271] StartTransactionCommand
980127.17 : 52 : 14.174 [29271] 프로세스 성 : 낙하 표 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 스크립트를 쉽게 작성할 수 있습니다. 데이터베이스 오류 또는 문제를 감지하기 위해 로그를 모니터링하거나 거래 시간 통계 계산.

syslog에 인쇄 된 메시지 로그 시설 Log_local0을 사용하십시오. 그만큼 syslog의 사용은 syslog pg_option으로 제어 할 수 있습니다. 불행히도 많은 기능이 직접 호출printf ()메시지를 stdout 또는 STDERR 및이 출력은 Syslog 또는 그것에 타임 스탬프. Printf에 대한 모든 호출이 권장됩니다 printf 매크로로 대체되고 stderr 로의 출력 대신 eprintf를 사용하도록 변경하여 모든 출력을 제어 할 수 있습니다. 균일 한 방법.

새로운 배트맨 토토 메커니즘은 정의보다 편리합니다 새로운 백엔드 옵션 스위치 때문에 :

  • 우리는 각각의 다른 스위치를 정의 할 필요가 없습니다. 통제하고 싶습니다. 모든 옵션은 an의 키워드로 정의됩니다 데이터 디렉토리에 저장된 외부 파일.

  • 다시 시작할 필요가 없습니다Postgres일부의 설정을 변경하려면 옵션. 일반적으로 백엔드 옵션은 우체국 장 마스터가 시작될 때 각 백엔드로 전달되었습니다. 지금 파일에서 읽습니다.

  • 백엔드가 실행되는 동안 즉시 옵션을 변경할 수 있습니다. 따라서 디버그를 활성화하여 일부 문제를 조사 할 수 있습니다 문제가 나타날 때만 메시지. 우리는 또한 시도 할 수 있습니다 조정 가능한 매개 변수에 대한 다른 값.

형식배트맨 토토파일입니다 다음과 같이 :
#댓글
옵션=integer_value## 값 설정옵션
옵션# set옵션= 1옵션+ # set옵션= 1옵션- # set옵션= 0
참고키워드정의 된 옵션 이름의 약어백엔드/utils/misc/trace.c.

참조관리자 안내서현재의 전체 목록을위한 런타임 옵션에 대한 장 지원되는 옵션.

개인 변수 및 옵션을 사용하는 기존 코드 중 일부 배트맨 토토 기능을 사용하도록 스위치가 변경되었습니다. 주로postgres.c. 그럴 것입니다 이러한 방식으로 모든 기존 코드를 수정하는 것이 좋습니다. 많은 스위치를 제거하십시오Postgres명령 줄을 가질 수 있습니다 옵션 값을 넣을 수있는 고유 한 장소가있는 조정 가능한 옵션.