PostgreSQL 로그 정보 가 있 는 원본 파일 과 줄 의 인 스 턴 스 를 인쇄 합 니 다.

PG 에서 오류 로 그 를 출력 할 때 오류 정보 가 있 는 소스 코드 파일 이름과 오류 가 발생 한 코드 줄 수 를 어떻게 추가 할 수 있 는 지 궁금 했다.
postgres.conf 에서 log 정보의 불필요 한 단 계 는"default(기본 값)"입 니 다.terse:더 간단 한 로그 정 보 를 표시 합 니 다.verbose:더 많은 로그 정 보 를 표시 합 니 다(즉,"파일 이름과 줄 수 를 추가 합 니 다).

#log_error_verbosity = default # terse, default, or verbose messages
아래 의"verbose"로 수정 하면 됩 니 다.

log_error_verbosity = verbose # terse, default, or verbose messages
수정 후 인 스 턴 스 를 다시 시작 하면 효력 이 발생 합 니 다.결 과 는 다음 과 같 습 니 다.로그 정보 에'파일 이름'과'줄 수'정보 가 첨부 되 어 있 습 니 다.

2020-03-02 09:34:41.800 CST [9019] LOG: 00000: listening on IPv6 address "::1", port 7433
2020-03-02 09:34:41.800 CST [9019] LOCATION: StreamServerPort, pqcomm.c:593
2020-03-02 09:34:41.800 CST [9019] LOG: 00000: listening on IPv4 address "127.0.0.1", port 7433
2020-03-02 09:34:41.800 CST [9019] LOCATION: StreamServerPort, pqcomm.c:593
2020-03-02 09:34:41.801 CST [9019] LOG: 00000: listening on Unix socket "/tmp/.s.PGSQL.7433"
2020-03-02 09:34:41.801 CST [9019] LOCATION: StreamServerPort, pqcomm.c:587
2020-03-02 09:34:41.814 CST [9020] LOG: 00000: database system was shut down at 2020-03-02 09:34:24 CST
2020-03-02 09:34:41.814 CST [9020] LOCATION: StartupXLOG, xlog.c:6291
2020-03-02 09:34:41.819 CST [9019] LOG: 00000: database system is ready to accept connections
2020-03-02 09:34:41.819 CST [9019] LOCATION: reaper, postmaster.c:2938
비고:상기 verbose 방법 은 debug 모드 에서 만 유효 합 니 다.release 에 파일 이름과 줄 수 에 관 한 정보 가 전혀 없 기 때 문 입 니 다.
추가:PostgreSQL 데이터베이스 실행 로그
PostgreSQL 에는 세 가지 로그 가 있 습 니 다.
1、pg_wal(WAL 로그,즉 로 그 를 다시 만 드 는 것)내용 은 읽 을 수 없 는 강제 오픈 입 니 다.
2、pg_log(데이터베이스 실행 로그)내용 을 읽 을 수 있 습 니 다.기본 으로 닫 힌 것 은 인자 시작 을 설정 해 야 합 니 다.
3、pg_clog(트 랜 잭 션 제출 로그,트 랜 잭 션 의 메타 데이터 기록)내용 은 읽 을 수 없 는 강제 오픈 입 니 다.
PostgreSQL 실행 로 그 는 로그 출력 기록 을 실현 할 수 있 습 니 다.기본적으로 시작 기록 이 없습니다.이 로 그 는 일반적으로 서버 와 DB 의 상 태 를 기록 합 니 다.예 를 들 어 각종 Error 정보,위치 추적 이 느 린 SQL 조회,데이터 뱅 크 의 시작 닫 기 정보,checkpoint 가 너무 자주 발생 하 는 등 경고 정보 등 이 있 습 니 다.
PostgreSQL 상용 로그 인자
항목
기본 값
설정 값
설명 하 다.
logging_collector
off
on
로그 수집 기능 시작 여부
log_destination
stderr
csvlog
로그 수집 저장 방식
log_directory
log
pg_log
로그 수집 저장 경로
log_filename
postgresql-%Y-%m-%d.log
postgresql-%Y-%m-%d_%H%M%S.log
로그 파일 이름 형식
log_timezone
RPC
RPC
로그 시간 대
log_rotation_age
1440
7d
단일 로그 파일 생존 주기,기본 1 일
log_rotation_size
10240
100MB
단일 로그 파일 크기
log_truncate_on_retation
off
off
log_rotation_age 가 다음 로 그 를 전환 합 니 다.존재 하면 추가 합 니 다.그렇지 않 으 면 덮어 씁 니 다.
log_min_messages
warning
warning
로그 출력 단계
log_min_duration_statement
-1
3000
-1 사용 할 수 없 음 을 표시 합 니 다.0 은 모든 SQL 문장 과 그들의 소모 시간 을 기록 합 니 다.>0 은 이 값(ms)을 초과 하 는 SQL 문장 만 기록 합 니 다.
log_checkpoints
off
on
체크 포인트 정보 기록
log_connections
off
on
연결 로그 기록 여부
log_disconnections
off
on
연결 끊 기 로 그 를 기록 할 지 여부
log_duration
off
off
모든 SQL 문 구 를 실행 하 는 데 걸 리 는 시간 을 기록 합 니 다.
log_line_prefix
%m[%p]
%e: %t [%p]: [%l-1] user = %u,db = %d,remote = %r app = %a
로그 출력 형식;
log_lock_waits
off
on
세 션 대기 시간 이 deadlock 을 초과 할 때 제어 합 니 다.timeout 이 잠 겼 을 때 로그 정보 가 생 겼 는 지 여부 입 니 다.잠 금 대기 문제 가 있 는 지 판단 할 수 있 습 니 다.
log_statement
none
ddl
어떤 SQL 문 구 를 기록 하 는 지 제어 합 니 다.선택 값:none=>기록 하지 않 음,dl=>Create table 같은 것,mod=>DML 구문,all=>모든 것 을 기록 합 니 다.
log_line_prefix 매개 변수 설명:

%a = application name     
%u = user name     
%d = database name      
%r = remote host and port        
%h = remote host     
%p = process ID    
%t = timestamp without milliseconds      
%m = timestamp with millisecond      
%n = timestamp with milliseconds (as a Unix epoch)      
%i = command tag     
%e = SQL state SQL    
로그 설정 방식
시동 pglog 설정 과 로그 인자

ALTER SYSTEM SET log_destination = 'csvlog';
ALTER SYSTEM SET logging_collector = on;
ALTER SYSTEM SET log_directory = 'pg_log';
ALTER SYSTEM SET log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log';
ALTER SYSTEM SET log_rotation_age = '7d';
ALTER SYSTEM SET log_rotation_size = '100MB';
ALTER SYSTEM SET log_min_messages = warning;
실행 이 느 린 SQL 문 구 를 기록 합 니 다.

ALTER SYSTEM SET log_min_duration_statement = 3000;
ALTER SYSTEM SET log_checkpoints = on;
ALTER SYSTEM SET log_connections = on;
ALTER SYSTEM SET log_disconnections = on;
ALTER SYSTEM SET log_duration = off;
ALTER SYSTEM SET log_line_prefix = '%e: %t [%p]: [%l-1] user = %u,db = %d,remote = %r app = %a';
데이터베이스 의 장시간 잠 금 을 감시 하 다.

ALTER SYSTEM SET log_lock_waits = on;
기록 DDL 조작

ALTER SYSTEM SET log_statement = 'ddl';
매개 변수 조회

select name,setting,short_desc from pg_settings where name like 'log_%';
서비스 재 부팅&Reload 파라미터

//     
pg_ctl restart -m fast -D /pgdata/11.2/data
// Reload  
select pg_reload_conf();
CSV 로 그 를 데이터베이스 분석 에 가 져 오기
:\#데이터 시트 만 들 기

CREATE TABLE postgres_log
(
 log_time timestamp(3) with time zone,
 user_name text,
 database_name text,
 process_id integer,
 connection_from text,
 session_id text,
 session_line_num bigint,
 command_tag text,
 session_start_time timestamp with time zone,
 virtual_transaction_id text,
 transaction_id bigint,
 error_severity text,
 sql_state_code text,
 message text,
 detail text,
 hint text,
 internal_query text,
 internal_query_pos integer,
 context text,
 query text,
 query_pos integer,
 location text,
 application_name text,
 PRIMARY KEY (session_id, session_line_num)
);
:\#CSV 로그 불 러 오기

\copy postgres_log from ‘<CSV    >' with csv;

:\#데이터 검색 테스트

// csv      
select min(log_time),max(log_time) from postgres_log;
  min  |  max
----------------------------+---------------------------
 2019-12-11 23:18:17.334+08 | 2019-12-11 23:30:49.04+08
(1    )
//         
select log_time,database_name,user_name,application_name,message from postgres_log where message like '%duration%';
  log_time  | database_name | user_name | application_name | message
----------------------------+---------------+-----------+------------------+-----------------------
 2019-12-11 23:18:33.559+08 | pgbench | pgbench | pgbench  | duration: 36.286 ms
 2019-12-11 23:18:33.573+08 | pgbench | pgbench | pgbench  | duration: 13.944 ms
 2019-12-11 23:18:33.581+08 | pgbench | pgbench | pgbench  | duration: 7.953 ms
 2019-12-11 23:18:34.561+08 | pgbench | pgbench | pgbench  | duration: 976.103 ms
SQL 통계 정보
pg_stat_statements 는 SQL 의 많은 정 보 를 통계 하여 SQL 의 성능 을 분석 하 는 데 편리 합 니 다.
:\#매개 변수 설정

alter system set shared_preload_libraries = pg_stat_statements;
:\#서비스 재 부팅&Reload 매개 변수

pg_ctl restart -m fast -D /pgdata/11.2/data
:\#확장 표 만 들 기

CREATE EXTENSION pg_stat_statements;
:\#조회 TOP 10

SELECT query, calls, total_time, (total_time/calls) as average ,rows, 
 100.0 * shared_blks_hit /nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent 
FROM pg_stat_statements 
ORDER BY average DESC LIMIT 10;
※집계 결과 가 계속 나 오고 있어 재 개 해도 0 이 되 지 않 습 니 다.다음 명령 을 통 해 수 동 으로 제거 할 수 있 습 니 다.

select pg_stat_statements_reset() ;
로그 보존 주기
보통 디스크 용량 이 터 지지 않도록 로 그 를 정기 적 으로 보관 합 니 다.이 때 는 로그 보존 주 기 를 고려 해 야 합 니 다.
핵심 매개 변수:
항목
기본 값
설정 값
설명 하 다.
log_truncate_on_retation
off
off
log_rotation_age 가 다음 로 그 를 전환 합 니 다.존재 하면 추가 합 니 다.그렇지 않 으 면 덮어 씁 니 다.
log_rotation_age
1440
7d
단일 로그 파일 생존 주기,기본 1 일
log_rotation_size
10240
100MB
단일 로그 파일 크기
분당 파일 을 만 들 고 1 시간 동안 보관 합 니 다:

log_destination = 'csvlog' 
logging_collector = on 
log_directory = 'log' 
log_filename = 'postgresql-%M.log' 
log_truncate_on_rotation = on 
log_rotation_age = 1min 
log_rotation_size = 100MB
시간 당 한 개의 파일 을 하루 동안 보관 합 니 다.

log_destination = 'csvlog' 
logging_collector = on 
log_directory = 'log' 
log_filename = 'postgresql-%H.log' 
log_truncate_on_rotation = on 
log_rotation_age = 1hour 
log_rotation_size = 100MB
매일 한 개의 파일 을 한 달 동안 보관 합 니 다.

log_destination = 'csvlog' 
logging_collector = on 
log_directory = 'log' 
log_filename = 'postgresql-%d.log' 
log_truncate_on_rotation = on 
log_rotation_age = 1day 
log_rotation_size = 100MB
매달 하나의 서 류 를 1 년 간 보관 합 니 다.

log_destination = 'csvlog' 
logging_collector = on 
log_directory = 'log' 
log_filename = 'postgresql-%m.log' 
log_truncate_on_rotation = on 
log_rotation_age = 1month 
log_rotation_size = 100MB
매일 하나의 파일 을 1 년 간 보관 합 니 다.

log_destination = 'csvlog' 
logging_collector = on 
log_directory = 'log' 
log_filename = 'postgresql-%m-%d.log' 
log_truncate_on_rotation = on 
log_rotation_age = 1day 
log_rotation_size = 100MB
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기