이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

27장. 사설 토토하기 pg_options

참고:기고자:마시모 달 조토

선택적 파일데이터/pg_options추적을 제어하기 위해 백엔드에서 사용하는 런타임 옵션이 포함되어 있습니다. 메시지 및 기타 백엔드 조정 가능 매개변수. 이 파일을 만드는 이유 흥미로운 점은 다음과 같은 경우 백엔드에서 다시 읽힌다는 것입니다. 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_PG_OPTIONS /* 열거형의 마지막 항목이어야 합니다 */
;
및 해당 줄백엔드/utils/misc/trace.c:
/* 파일 추적.c */
정적 문자 *opt_names[] = 
    ...
    "foo", /* foo 함수 추적 */
    "fooparam" /* foo 조정 가능 매개변수 */
;
두 파일의 옵션은 정확히 다음 파일에 지정되어야 합니다. 같은 순서. foo 소스 파일에서 이제 새로운 항목을 참조할 수 있습니다. 다음과 같은 플래그:
/* 파일 foo.c */
#include "trace.h"
#foo_param pg_options 정의[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 pg_options[OPT_MY_OWN_FLAG]

모든 pg_options는 백엔드 시작 시 0으로 초기화됩니다. 만약 우리가 다른 기본값이 필요합니다. 초기화 코드를 추가해야 합니다. 처음에포스트그레스메인. 이제 우리는 foo_param을 설정하고 값을 기록하여 foo 추적을 활성화할 수 있습니다.데이터/pg_options파일:

# 파일 pg_options
...
foo=1
푸파람=17

새 옵션은 모든 새 백엔드에서 읽혀집니다. 시작되었습니다. 실행 중인 모든 백엔드에 대한 변경 사항을 효과적으로 적용하기 위해 우체국장에게 SIGHUP을 보내야 합니다. 신호는 다음과 같습니다. 자동으로 모든 백엔드로 전송됩니다. 우리는 또한 SIGHUP을 직접 전송하여 특정 백엔드에 대해서만 변경 그것에.

pg_options는 다음과 같이 지정할 수도 있습니다.-티전환포스트그레:

포스트그레옵션-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 스크립트를 더 쉽게 작성할 수 있습니다. 로그를 모니터링하여 데이터베이스 오류나 문제를 감지하거나 트랜잭션 시간 통계를 계산합니다.

syslog에 인쇄된 메시지는 로그 기능 LOG_LOCAL0을 사설 토토합니다. 는 syslog 사설 토토은 syslog pg_option으로 제어할 수 있습니다. 불행히도 많은 함수가 직접 호출됩니다.printf()메시지를 표준 출력으로 인쇄하거나 stderr 및 이 출력은 syslog로 리디렉션될 수 없습니다. 그 안에 타임스탬프가 있습니다. printf에 대한 모든 호출은 PRINTF 매크로로 대체되고 stderr로 출력됩니다. 대신 EPRINTF를 사설 토토하도록 변경되어 모든 출력을 제어할 수 있습니다. 균일한 방식으로.

새로운 pg_options 메커니즘은 정의하는 것보다 더 편리합니다. 다음과 같은 이유로 새로운 백엔드 옵션이 전환됩니다.

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

  • 다시 시작할 필요는 없습니다포스트그레스일부 설정을 변경하려면 옵션. 일반적으로 백엔드 옵션은 postmaster가 시작될 때 각 백엔드로 전달됩니다. 지금 파일에서 읽혀집니다.

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

형식pg_options파일은 다음과 같이:

# 댓글
옵션=정수_값# 다음에 대한 값 설정옵션
옵션#세트옵션 = 1
옵션+ # 세트옵션 = 1
옵션- # 세트옵션 = 0
참고키워드또한 가능합니다 에 정의된 옵션 이름의 약어백엔드/utils/misc/trace.c.

현재 정의된 옵션백엔드/utils/misc/trace.c다음은 다음과 같습니다:

모두

전역 추적 플래그. 허용되는 값은 다음과 같습니다.

0

추적 메시지가 개별적으로 활성화됨

1

모든 추적 메시지 활성화

-1

모든 추적 메시지 비활성화

상세

상세 플래그. 허용되는 값은 다음과 같습니다.

0

메시지가 없습니다. 이것이 기본값입니다.

1

정보 메시지를 인쇄합니다.

2

더 많은 정보 메시지를 인쇄하세요.

질의

쿼리 추적 플래그. 허용되는 값은 다음과 같습니다.

0

쿼리를 인쇄하지 마세요.

1

한 줄로 압축된 쿼리를 인쇄합니다.

4

전체 쿼리를 인쇄하세요.

계획

쿼리 계획을 인쇄합니다.

파싱

파서 출력을 인쇄합니다.

재작성

재작성된 쿼리를 인쇄합니다.

파서 통계

파서 통계를 인쇄합니다.

plannerstats

인쇄 플래너 통계입니다.

executorstats

실행자 통계를 인쇄합니다.

단축

현재는 사용되지 않지만 다음의 기능을 활성화하는 데 필요합니다. 미래.

잠금

추적 잠금.

사용자 잠금

사용자 잠금을 추적합니다.

스핀락

스핀 잠금을 추적합니다.

통지

트레이스 알림 기능.

malloc

현재 사용되지 않습니다.

팔록

현재 사용되지 않습니다.

lock_debug_oidmin

잠금으로 추적되는 최소 관계 oid.

lock_debug_relid

0이 아닌 경우 잠금으로 추적되는 관계의 oid입니다.

lock_read_priority

현재 사용되지 않습니다.

deadlock_timeout

교착 상태 확인 타이머.

syslog

syslog 플래그. 허용되는 값은 다음과 같습니다.

0

stdout/stderr에 보내는 메시지.

1

stdout/stderr 및 syslog에 보내는 메시지.

2

syslog에만 메시지가 전송됩니다.

호스트 조회

ps_status에서 호스트 이름 조회를 활성화합니다.

쇼포트번호

ps_status에 포트 번호를 표시합니다.

notifyunlock

알림 후 pg_listener 잠금 해제.

해킹 알림

pg_listener에서 중복된 튜플을 제거하십시오.

예를 들어 내 pg_options 파일에는 다음이 포함되어 있습니다 값:

상세=2
쿼리
호스트 조회
표시번호

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