database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Columns 9483 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 9483
PostgreSQL을 쓰면서 알아두면 좋은 팁 7가지
작성자
김상기(ioseph)
작성일
2014-11-18 13:31ⓒ
2014-12-16 21:05ⓜ
조회수
7,903

 http://postgresdba.com 에서 이벤트가 있어 그곳에 쓴 글을 정리 해서 다시 올립니다. 

 

1. 서버 로그를 한달치만 보관하기

postgresql.conf 파일에서

log_destination = 'stderr'
logging_collector = on
log_filename = 'postgresql-%d.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
 
수정
 
 
2. 데이터베이스 서버가 운영중인지를 확인 하는 쿼리
 
select txid_current()
 
 
3. lock에 구애받지 않고 테이블 크기 구하기
 
psql -t -c "select '\! echo -n ' || oid::regclass || ' \" \" && du -s ' || current_setting('data_directory') || '/' || pg_relation_filepath(oid::regclass) from pg_class where relkind  = 'r'" | psql
 
pg_table_size(), pg_relation_size() 함수는 해당 테이블이 잠겼을 때 풀릴 때까지 기다립니다. 
이 부분에 대한 피해가는 방법입니다. 
 
pg_class에서 대상을 어떻게 구하느냐에 따라 쿼리가 약간씩 바뀌겠지요. 
 
 
4. pg_stat_activity.application_name 칼럼을 사용하세요 네번째팁
 
해당 칼럼 값은 
set application_name = '프로그램이름'
형태로 지정합니다. 
 
응용 프로그램에서 데이터베이스를 사용하기전 이 작업을 해 두면 
데이터베이스 관리자가 참 편해집니다. 
 
 
5. 개발 언어별 prepared statement 특성
 
python이나, php 에서는 이 api를 사용하면 바로 서버측에서 해당 쿼리의 실행계획까지 짜여진 정보가 저장 되지만, 
java jdbc에서는 그렇지 않습니다. 
많은 java 개발자들이 이 부분을 놓치고 있답니다. 
 
무조건 서버측 prepared statement 기능을 사용하려면, 
jdbc connection url에서 query string값으로 prepareThreshold=1 로 지정해 주어야 합니다. 
 
jdbc:postgresql://host:port/database?prepareThreshold=1 
 
형태가 되겠지요. 
db pool을 사용하고, 쿼리 패턴이 일정하다면, 이 설정이 꽤 도움이 될듯합니다. 특히나 게임서버나, 기타 미들웨어 서버를 만드는 경우에.
 
 
6. stats_temp_directory 변경
 
이 환경 설정 값의 디렉토리에 데이터베이스 실행중에 발생하는 각종 정보들이 저장되고 이것이 통계수집기 프로세스가 주기적으로 pg_stat* 각종 뷰의 정보로 사용됩니다. 그래서, 이 디렉토리에 있는 파일들(9.2 이하에서는 하나, 9.3 이상에서는 데이터베이스별로)은 자료조작 작업이 빈번하게 일어나는 만큼 빈번하게 변경됩니다. 문제는 데이터베이스의 서버가 바쁠 때 이 통계작업을 포기한다는 것입니다. 이 때 서버 로그 메시지는 경고로 "pgstat wait timeout" 이런 메시지가 보입니다. 
이 부분을 피하는 방법으로 이 디렉토리를 OS의 공유 메모리 영역으로 지정하는 것입니다. 물론 OS가 리부팅되면 모두 초기화 되겠지요. 
stats_temp_directory = '/dev/shm' 이런형태가 됩니다.
 
 
7. 트랜잭션 로그 아카이빙 압축하기
 
 
 archive_command = 'gzip -c %p > /archive_dir/%f.gz'

restore_command = 'gzip -dc /archive_dir/%f.gz > %p'

당연한 기법이겠지만, 아주 유용하게 쓰입니다. 물론 disk sync, 작업 도중 오류에 대한 예외처리를 고려하면 좀 더 복잡해지겠지만.
[Top]
No.
제목
작성자
작성일
조회
10444오늘의 팁: psql 에서 \pset numericlocale
김상기
2023-10-19
173
10416오늘의 팁: client_connection_check_interval 이야기
김상기
2023-04-21
405
10389클라이언트 - 서버 프로토콜 버전 이야기
김상기
2023-03-08
438
9483PostgreSQL을 쓰면서 알아두면 좋은 팁 7가지
김상기
2014-11-18
7903
9244archive_mode on 기반 부분 복구에 대한 전략 [1]
김상기
2013-02-22
8124
9223PostgreSQL checkpoint 로그 읽기
김상기
2013-01-25
9009
9022PostgreSQL 대량 세션 [1]
김상기
2012-08-29
8999
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다