1. Architecture(Data Cluster) : Overview
2. PPAS 엔진영역
ㅇ 엔진 영역 : .../PostgresPlus/9.2AS/, $EDBHOME
① bin : PPAS 운영에 필요하여 제공된 실행 파일 존재
② connectors : 개발환경 별 필요한 연결 드라이브와 파일 존재
③ doc : PPAS의 Sub 프로그램과 확장 모듈에 대한 설명서 파일 존재
④ etc : pgpool 환경 설정 파일과 마이그레이션 도구 runMTK 툴 환경 설정 파일 존재
⑤ include : C언어 소스 컴파일에 필요한 헤더 파일 존재
⑥ installer : PPAS 엔진 설치 후 부가 설치 스크립트 파일 존재
⑦ jre : jvm환경에서 실행되는 프로그램(xdb-replication, runMTK 등)을 위한 jre 패키지 설치 파일 존재
⑧ lib : 동적 라이브러리들과 C언어 개발에 필요한 정적 라이브러리 파일 존재
⑨ scripts : PPAS 설치 시 필요한 스크립트 파일 존재
⑩ share : 확장 모듈 초기화 스크립트 파일 존재
⑪ stackbuilderplus : DB 엔진과 각종 부가 패키지 설치 및 업그레이드를 관리하는 Stackbuilder 존재
※ $EDBHOME 환경변수 설정 파일 : pgplus_env.sh로 정의
[enterprisedb@myOllehDB1 ~]$ cat /postgres/9.2AS/pgplus_env.sh
....
# Environment
export PATH=/postgres/9.2AS/bin:$PATH
export EDBHOME=/postgres/9.2AS
export PGDATA=/data/myOllehDB
export PGDATABASE=edb
# export PGUSER=enterprisedb
export PGPORT=5444
export PGLOCALEDIR=/postgres/9.2AS/share/locale
3. Data Cluster 구조도
ㅇ 경로 : .../PostgrePlus/9.0AS/data/, $PGDATA
- PPAS의 데이터를 저장하는 공간, $PGDATA 디렉토리 (백업대상인 영역)
3. Data Cluster 확인방법과 PG_VERSION
ㅇ 위치 확인 방법
• Dictionary 정보 조회
edb=# show data_directory;
/data/myOllehDB
• OS상에서 edb-postgres 프로세스 실행 옵션 중간의 -D 옵션 확인
[enterprisedb@myOllehDB1 myOllehDB]$ ps -ef | grep edb-postgres
502 6478 16659 0 18:05 pts/2 00:00:00 grep edb-postgres
502 28459 1 0 2013 ? 00:21:36 /postgres/9.2AS/bin/edb-postgres -D /data/myOllehDB -i -k /tmp -p 5444
• OS상에서 $PGDATA/PG_VERSION 파일 확인
[enterprisedb@myOllehDB1 /]$ find ./ -name PG_VERSION
...
./data/myOllehDB/PG_VERSION
ㅇ PG_VERSION : PostgreSQL의 주요 버전 번호를 보유하는 파일
[enterprisedb@myOllehDB1 /]$ find ./ -name PG_VERSION
...
./data/myOllehDB/PG_VERSION
4. Data and Log Files
① global : pg_database 에 기록된 클러스터의 모든 데이터베이스에서 공유하는 카탈로그 테이블 존재, pg_global 테이블스페이스 경로
- pg_control 파일 : Data Cluster의 컨트롤 정보 저장 (버전, 트랜잭션, 체크포인트, 백업, 데이터 블록 크기, 트랜잭션 로그 크기 등)
pg_control version number: 922
Catalog version number: 201204301
Database system identifier: 5896984738662375033
Database cluster state: in production
pg_control last modified: Wed 08 Jan 2014 11:20:52 AM KST
Latest checkpoint location: 2C/58422478
Prior checkpoint location: 2C/583CA9A8
Latest checkpoint's REDO location: 2C/58422478
Latest checkpoint's TimeLineID: 1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID: 0/2019363
Latest checkpoint's NextOID: 76106
Latest checkpoint's NextMultiXactId: 1
Latest checkpoint's NextMultiOffset: 0
Latest checkpoint's oldestXID: 1860
Latest checkpoint's oldestXID's DB: 1
Latest checkpoint's oldestActiveXID: 0
Time of latest checkpoint: Wed 08 Jan 2014 11:20:45 AM KST
Minimum recovery ending location: 0/0
Backup start location: 0/0
Backup end location: 0/0
End-of-backup record required: no
Current wal_level setting: archive
Current max_connections setting: 1800
Current max_prepared_xacts setting: 0
Current max_locks_per_xact setting: 64
Maximum data alignment: 8
Database block size: 8192
Blocks per segment of large relation: 131072
WAL block size: 8192
Bytes per WAL segment: 16777216
Maximum length of identifiers: 64
Maximum columns in an index: 32
Maximum size of a TOAST chunk: 1996
Date/time type storage: 64-bit integers
Float4 argument passing: by value
Float8 argument passing: by value
- pg_internal.init, pg_filenode.map 파일 : 객체들의 속성 및 실제 파일의 맵핑 정보 저장
- pg_tablespace(테이블스페이스), pg_database(데이터베이스), pg_auth_members(DB사용자 및 Role 그룹), pg_authid(DB사용자 및 Role)
: 모든 DB에서 공통으로 참조하는 전역 객체들의 데이터와 인덱스 파일
Password for user enterprisedb:
psql (9.2.4.8)
Type "help" for help.
edb=# select pg_relation_filepath('pg_authid');
pg_relation_filepath
----------------------
global/13739
(1 row)
[enterprisedb@myOllehDB1 ~]$ cd $PGDATA/global
[enterprisedb@myOllehDB1 global]$ ls -l
total 1136
-rw------- 1 enterprisedb enterprisedb 8192 Jan 6 09:15 13739
-rw------- 1 enterprisedb enterprisedb 24576 Jul 5 2013 13739_fsm
-rw------- 1 enterprisedb enterprisedb 8192 Jul 5 2013 13739_vm
② base : 데이터베이스별 하위 디렉토리 보유, 각 디렉토리 별 테이블과 인덱스 파일 생성, pg_default 테이블스페이스 경로
- 저장규칙 : $PGDATA/base/{database_oid}/{object_id}
(database_oid : pg_database테이블의 oid를 통해 확인 / object_id : pg_class테이블의 oid를 통해 확인)
- 한 개 테이블이 1GB 이상일 경우 : 1GB 단위로 파일 분리하여 저장 (object_filenode.1, object_filenode.2, ...)
- _fsm 파일 : Free Space Map, 블록의 빈 공간 정보 보관, vacuum 및 DML 작업 시 사용 (vacuum 작업 후 생성, 근본 유발요인은 아님)
- _vm 파일 : Visibility Map, 실제 사용하는 데이터 정보 보관, select full sequence scan 시 사용 (vacuum 작업 후 생성, 근본 유발요인은 아님)
- t로 시작하는 파일 : Temp, 임시 테이블 파일
- pg_version 파일 : 'OS버전 - Bit정보 - DB엔진 메이저 버전' 정보를 갖는 파일 (OS와 DB간의 호환성 확인)
- pg_filenode.map, pg_internal.init 파일 : 앞장의 global 디렉토리 설명 참조
- pg_database_size('<DB명>') 함수를 통한 해당영역 크기 확인 가능 (temp 파일 때문에 매번 달라질 수 있음)
pg_database_size
------------------
9111256
(1 row)
※ Database와 Object 확인
[enterprisedb@myOllehDB1 base]$ cd $PGDATA/base
[enterprisedb@myOllehDB1 base]$ ls -l
total 72
drwx------ 2 enterprisedb enterprisedb 12288 Nov 24 00:09 1
drwx------ 2 enterprisedb enterprisedb 12288 Jul 5 2013 14077
drwx------ 2 enterprisedb enterprisedb 12288 Nov 24 00:10 14082
drwx------ 2 enterprisedb enterprisedb 12288 Jan 7 11:31 14083
drwx------ 2 enterprisedb enterprisedb 20480 Jan 7 11:30 16394
drwx------ 2 enterprisedb enterprisedb 4096 Jan 7 04:05 pgsql_tmp
[enterprisedb@myOllehDB1 base]$ psql -U enterprisedb
Password:
psql (9.2.4.8)
Type "help" for help.
edb=# select a.datname, a.datdba, b.rolname
from pg_database a, pg_authid b
where a.oid = 14082
and a.datdba = b.oid;
datname | datdba | rolname
----------+--------+--------------
postgres | 10 | enterprisedb
(1 row)
edb=# /q
[enterprisedb@myOllehDB1 base]$ cd 14082
[enterprisedb@myOllehDB1 14082]$ ls -l
total 8748
-rw------- 1 enterprisedb enterprisedb 8192 Jul 5 2013 13351
-rw------- 1 enterprisedb enterprisedb 8192 Jul 5 2013 13624
....
[enterprisedb@myOllehDB1 base]$ psql -U enterprisedb
Password:
psql (9.2.4.8)
Type "help" for help.
edb=# \c postgres
You are now connected to database "postgres" as user "enterprisedb".
postgres=# select oid, relowner, relname, reltype
from pg_class
where relfilenode = 13351;
oid | relowner | relname | reltype
-------+----------+----------------------+---------
13351 | 10 | plsql_profiler_runid | 13352
(1 row)
postgres=# select pg_relation_filepath('plsql_profiler_runid');
pg_relation_filepath
----------------------
base/14082/13351
(1 row)
③ pg_xlog : 실제 트랜잭션 정보를 담은 LOG 파일 존재
- DB 비정상 종료 시 복구를 위해 사용되며 아카이빙을 통해 별도 보관
- 트랜잭션 로그의 개수는 checkpoint_segments 환경 설정 값의 3 배 정도 (용량은 초기값 기준 3GB)
- 심볼릭 링크 파일을 생성하여 실제로는 별도 디렉토리에 트랜잭션 파일 저장 권장 (백업 시 제외 등 운영상 이점을 위함)
④ pg_clog : 트랜잭션 커밋 정보를 담은 여러 파일 존재 (2bit 단위로 저장)
autovacuum_freeze_max_age 설정을 통해 파일 최대값 설정 가능
⑤ pg_notify : NOTIFY로 정의된 각 세션 별 이벤트 기록
(LISTEN, NOTIFY SQL명령을 통해 감지 처리)
⑥ pg_stat_tmp : 통계 서브시스템을 위해 통계 수집기가 사용하는 임시용 파일 저장
⑦ pg_tblspc : 테이블스페이스의 심볼릭 링크 보관
- 심볼릭 링크 파일을 생성하여 실제로는 별도 디렉토리에 저장 권장
- 기본 테이블스페이스인 pg_defualt, pg_blobal은 별도 저장
※ PPAS에서의 Tablespace : 용도 별 구분을 위해서 사용하기도 하지만, 데이터 클러스터의 공간이 부족할 경우 한 개의 PPAS서버가 사용할 수 있는 별도의 파일시스템 지정 가능
⑧ pg_multixact : Shared Row Lock 처리를 위한 멀티 트랜잭션 상태 값 정보 저장
⑨ pg_serial : 커밋된 Serializable 트랜잭션 상태 정보 저장
⑩ pg_subtrans : Sub 트랜잭션 상태 정보 저장
⑪ pg_twophase : 2단계 커밋 또는 prepared 트랜잭션 상태 정보 저장
⑫ pg_snapshots : 내보내기 된 트랜잭션 스냅 샷 저장
5. Configuration and Lock Files
ㅇ Configuration Files
① postgresql.conf : DBMS 실행 환경 설정 파일
파일 Reload 혹은 DB재기동을 통한 각종 설정 값 변경적용 가능
② pg_hba.conf : 클라이언트 접속 허용/제한에 대한 제어 파일
③ pg_ident.conf
ㅇ Lock Files
① postmaster.pid : Postmaster 프로세스가 역할 수행을 위해 필요한 정보 저장
- Postmaster Process ID(PID), Cluster Data Directory 경로, Postermaster 기동 시간, Port 번호, Unix-Domain Socket Directory 경로(윈도우의 경우 빈 란), First Valid Listen_address (IP등), Shared Memory Segment ID 등 서버가 실행되고 있을 시 해당 파일 생성 (Shutdown 시 파일 미 존재, pg_ctl은 해당 파일 존재여부로 서버 기동여부 확인)
② postmaster.opts : 마지막으로 서버를 시작할 때 명령 줄 옵션 및 상태 기록
[enterprisedb@myOllehDB1 myOllehDB]$ cat $PGDATA/postmaster.opts
/postgres/9.2AS/bin/edb-postgres "-D" "/data/myOllehDB" "-i" "-k" "/tmp" "-p" "5444"
[enterprisedb@myOllehDB1 myOllehDB]$ pg_ctl status
pg_ctl: server is running (PID: 28459)
/postgres/9.2AS/bin/edb-postgres "-D" "/data/myOllehDB" "-i" "-k" "/tmp" "-p" "5444"
by. 이은석 (2014.05.22)
'2. DBMS이야기 > 01. PostgreSQL' 카테고리의 다른 글
PostgreSQL 사용자 Data Type 정의 (0) | 2014.05.25 |
---|---|
PPAS DB Full 백업 스크립트 작성 및 관리 방법 (0) | 2014.05.23 |
[Admin] 1.Architecture : Instance (0) | 2014.05.21 |
PostgreSQL 내부 아키텍처에 따른 성능 지연 이슈? (0) | 2014.05.13 |
PostgreSQL (PPAS) PLAN 및 실행계획 보기 [2] (0) | 2014.05.02 |