달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2011. 1. 12. 17:08

Windows xp, Virtual Box, CentOS, PostgreSQL Work/PostgreSQL2011. 1. 12. 17:08

Windows에 PostgresSQL을 설치해보았으니 이제 Linux 에도 해보자.
설치까지는 별거 없었다.
역시 Test 환경을 만드는 것이 쉽지 않았다.
팀내 SE분이 아니었으면 엄청난 삽질을 했을 것으로 예상된다.(SE님 감사합니다 (--)(__))

. Virtual Box 설치 : 무리없음.
. Virtual Box로 CentOS설치 : image file 있으면 무리없음.
. Virtual Box에 Guest Addon 설치 : 무리 없음.
. Virtual Box의 CentOS에 PostgreSQL 설치 : 무리없음.
. 내 PC에서 Virtual Box의 CentOS의 PostgreSQL를 접속 : 이것이 생소했다. 아래처럼 설정한다.
1. 내 PC(windows xp)에서 [제어판]->[새 하드웨어 추가] 실행.
이 하드웨어를 컴퓨터에 이미 연결했습니까? -> yes
설치된 하드웨어 -> 새 하드웨어 장치 추가
원하는 작업을 선택하십시오. -> 목록에서 직접 선택한 하드웨어 설치
일반 하드웨어 종류 -> [네트워크 어댑터]
제조업체 -> [Microsoft], 네트워크 어댑터 -> [Microsoft Loopback Adapter]
다음, 마침
2. [내 네트워크 환경] -> [속성] 을 보고 새로운 [로컬 영역 연결 n] 이 추가되어 있는 것을 확인.
  새로 생성된 [로컬 영역 연결 n]의 [속성]에서 [인터넷 프로토콜(TCP/IP)] 의 속성을 편집한다.
다음 IP 주소 사용 선택
IP 주소 : 192.168.n.1
서브넷 마스크 : 255.255.255.0
기본 게이트웨이: (비워둔다)
3. Virtual Box에서 네트워크 카드가 2장인 것으로 인식하게 네트워크 카드를 추가한다.
Virtual Box의 CentOS power off
Virtual Box의 메뉴 중 [설정]
왼쪽 메뉴 중 [네트워크] 선택 
어댑터가 4개 보인다.
특별한 설정을 하지 않았다면, [어댑터1]은 NAT로 연결된 것을 확인할 수 있다.
[어댑터 2]를 사용하기로 한 후 [브릿지 어댑터] 로 설정한다.
[확인] 클릭 후 CentOS Startup
4. Virtual Box의 CentOS에서 해당 Loopback Adapter의 IP 대역을 사용하게 한다.
Gnom에서 작업.
[System] -> [Administration] -> [Network] 실행
Inactive 되어 있는 Device를 선택.
[Statically set IP addresses] 를 선택.
Address :192.268.n.2
Subnet mask:255.255.255.0
[OK] 선택
PostgreSQL startup
5. 내 PC에서 5432 port가 해당 IP로 연결되는지 확인
telnet 192.168.n.2 5432
6. 연결 잘 되면 완료. 연결 잘 안되면 처음부터 다시 확인.

. 다음에는 처음부터 잘 정리해서 올려볼가??
:
Posted by Elick
2011. 1. 11. 11:54

PostgreSQL - fsync Work/PostgreSQL2011. 1. 11. 11:54

PostgreSQL이 설치 된 후 Data Directory에 보면, postgresql.conf 라는 설정 파일이 있다.
이 설정 파일의 parameter 들 중 fsync 에 대해서 test해 본 결과를 기록한다.
이 옵션의 의미는 사용자가 시스템 콜 혹은 DML, DDL 등의 결과를 메모리에서 Disk로 내려쓰는 일을 하는 것을 의미한다.
언제 어떤 조건에서 내려쓰는지는 찾지 못했지만, 기본적으로 시간 날때 마다 쓰는 듯 한 느낌...
(좀 더 공부를..ㅠㅠ)

아래는 Test 결과...

create table t_20110110_03 ( name varchar(30) );
create table t_20110110_04 ( name varchar(30) );

SELECT COUNT(*) FROM t_20110110_02; -- 4,292,608

INSERT INTO t_20110110_03 SELECT * FROM t_20110110_02;
-- fsync off : 13860 ms
INSERT INTO t_20110110_04 SELECT * FROM t_20110110_02;
-- fsync on :  25125 ms

truncate table t_20110110_03;
truncate table t_20110110_04;

INSERT INTO t_20110110_03 SELECT * FROM t_20110110_02;
-- fsync on : 23516 ms
INSERT INTO t_20110110_04 SELECT * FROM t_20110110_02;
-- fsync off : 13860 ms

마지막 2개의 해당 쿼리를 실행할 때의 Phisical Disk Write 모습..

화면에 제대로 안잡혔는데... 위의 모습으로 보아 디스크의 효율적인 사용은 fsync off가 더 나은 듯 하다.
당연한 이야기 이지만, 상황에 따라 잘 써야 할 듯...
:
Posted by Elick
2011. 1. 7. 12:49

PostgreSQL - Windows 설치 후 해본 일 Work/PostgreSQL2011. 1. 7. 12:49

-- Tablespace 생성
CREATE TABLESPACE TS_WORK01 LOCATION E'E:\\PostgreSQL_DATA\\ts_work01';
CREATE TABLESPACE TS_WORK02 LOCATION E'E:\\PostgreSQL_DATA\\ts_work02';

-- Database 생성
CREATE DATABASE DB_WORK01 TABLESPACE=TS_WORK01;
CREATE DATABASE DB_WORK02 TABLESPACE=TS_WORK02;

-- USER 생성
CREATE USER kipi WITH PASSWORD 'xxxxxxxx';

-- OWNER 변경
ALTER TABLESPACE TS_WORK01 OWNER TO kipi;
ALTER TABLESPACE TS_WORK02 OWNER TO kipi;
ALTER DATABASE DB_WORK01 OWNER TO kipi;
ALTER DATABASE DB_WORK02 OWNER TO kipi;

-- 제거
DROP DATABASE DB_WORK01;
DROP DATABASE DB_WORK02;
DROP TABLESPACE TS_WORK01;
DROP TABLESPACE TS_WORK02;
DROP USER kipi;
:
Posted by Elick
2011. 1. 6. 18:09

PostgreSQL 관리 20101225 Work/PostgreSQL2011. 1. 6. 18:09

[기본 정보]
현재 PostgreSQL 사용 Port : SELECT inet_server_port();
현재 Database : SELECT current_database();
현재 접속 User : SELECT current_user;
현재 Server IP : SELECT inet_server_addr();
현재 PostgreSQL version : SELECT version();
현재 PostgreSQL 시간 : SELECT current_time;
현재 PostgreSQL 의 UPTIME : SELECT date_trunc('second', current_timestamp - pg_postmaster_start_time()) as uptime;
현재 PostgreSQL 의 시작시간 : SELECT pg_postmaster_start_time();
현재 PostgreSQL 의 UPTIME 상세 : SELECT current_timestamp - pg_postmaster_start_time();
현재 PostgreSQL 에 존재하는 Database : SELECT datname FROM pg_database;

[Lock Monitor]
DBMS 운영시 특정 Session의 lock을 감지하여 해당 Process를 강제종료 해야하는 경우가 종종 발생한다.
* 감지방법
SELECT * from pg_stat_activity;
  혹은
SELECT
w.current_query as waiting_query
, w.procpid as w_pid
, w.usename as w_user
, l.current_query as locking_query
, l.procpid as l_pid
, l.usename as l_user
, t.schemaname || '.' || t.relname as tablename
FROM pg_stat_activity w
join pg_locks l1 on w.procpid = l1.pid and not l1.granted
join pg_locks l2 on l1.relation = l2.relation and l2.granted
join pg_stat_activity l on l2.pid = l.procpid
join pg_stat_user_tables t on l1.relation = t.relid;
* 종료방법
select pg_cancel_backend(11836);

[Table / Column 보기]
SELECT pg_attribute.attname, pg_type.typname
 FROM pg_class, pg_attribute, pg_type
WHERE pg_class.relname = 'table_name' 
 AND pg_attribute.attnum > 0 
 AND pg_attribute.attrelid = pg_class.oid 
 AND pg_attribute.atttypid = pg_type.oid;

[Column Default Value 추가]
ALTER TABLE <table name> ALTER COLUMN <column name> SET DEFAULT <value>;

예)
ALTER TABLE tb_jp_2 ALTER COLUMN last_modified SET DEFAULT current_timestamp;

[성능유지]
아래 사항에 대해 Data 변경이 발생시 혹은 주기적으로 작업을 해야 한다고 한다.
(확인된 사항은 아니지만, 알아둬야 할 것 같다.)
---------------------------------------------------
update, delete 가 발생한 것에 대한 garbage 정리를 해야 한다.
#-- postgres 로 login
vacuumdb -a -f -z -v
index 정리
#-- postgres 로 login
clusterdb [databasename]
---------------------------------------------------

[Tablespace]
PostgreSQL 도 8.xx version 부터는 Tablespace를 지원한다.
Tablespace의 일반적인 개념은 Oracle을 참고하면 비슷할 거라 예상되며, MSSQL은 File Group 을 참고하면 된다.

아래는 실제 작업했던 script 이다.

. Tablesapce 대상 선정
. directory 설정.
---------------------------------------------------
su -
mkdir /mng/solrdata/pg_data
chown postgres /mng/solrdata/pg_data
chgrp postgres /mng/solrdata/pg_data
su - postgres
psql -d dbtest
CREATE TABLESPACE ts_xxxx location '/mnt/solrdata/pg_data';
---------------------------------------------------

위에 보면 알 수 있듯이 directory를 생성 후 그 directory를 통채로 Tablesapce로 지정하는 형태이다.

Tablespace 변경은 아래처럼 한다.
---------------------------------------------------
ALTER TABLE usasg SET TABLESPACE ts_forxtest;
ALTER TABLE kr_cwn SET TABLESPACE ts_forxtest;
ALTER TABLE kr_kpeg_factordb SET TABLESPACE ts_forxtest;
.
.
.
---------------------------------------------------
:
Posted by Elick
2011. 1. 6. 18:02

PostgreSQL Upgrade - 7.x->9.01 Work/PostgreSQL2011. 1. 6. 18:02

* 7.xx version이 자동으로 설치되지만, 최신version을 사용하기 위해서 upgrade 작업을 할 필요가 있다.

vi /etc/yum.repos.d/CentOS-Base.repo
를 실행하여 아래의 문구를 추가한다.

exclude=postgresql*

그리고 아래의 command를 순서대로 실행하면 된다.
----------------------------------------------
wget http://yum.pgrpms.org/reporpms/9.0/pgdg-centos-9.0-2.noarch.rpm
rpm -Uvh pgdg-centos-9.0-2.noarch.rpm

yum update
yum upgrade

yum install postgresql90 postgresql90-server

cat > /etc/sysconfig/pgsql/postgresql <<EOF
PGDATA=/var/lib/pgsql/9.0/data
PGPORT=5432
PGLOG=/var/lib/pgsql/9.0/pgstartup.log
PGOPTS=
EOF

service postgresql-9.0 initdb
----------------------------------------------

* postgresql.conf 을 수정한다.
vi /var/lib/pgsql/9.0/data/postgresql.conf
listen_addresses = '*'
port = 5432

* pg_hba.conf 도 확인하여 최초 설치시의 설정을 참고하여 수정한다.
/var/lib/pgsql/9.0/data/pg_hba.conf


* PostgreSQL 9.0.x의 시작/종료는 아래와 같다.
시작 : service postgresql-9.0 start
종료 : service postgresql-9.0 stop
:
Posted by Elick
2011. 1. 6. 17:55

PostgreSQL Install - Windows Work/PostgreSQL2011. 1. 6. 17:55

[Installation Download]
 http://www.enterprisedb.com/products/pgdownload.do#windows 에서 필요한 설치 File을 Download 한다.
실제 postgresql-9.0.1-1-windows.exe 를 Download하여 실행하면 별 문제없이 설치된다.

[.NET에서 PostgreSQL을 연결하기 위해서는 아래처럼 해야 한다는데... 확인이 필요하다.]
 http://cafe.naver.com/idea30.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=109
:
Posted by Elick
2011. 1. 6. 17:54

PostgreSQL Install - CentOS Work/PostgreSQL2011. 1. 6. 17:54

옛날 옛날에는  ftp://ftp.postgresql.org 로 부터 소스를 다운로드 받아서 설치를 해야 하는 상황이 있었다고 한다.
오늘날에는 그렇게 하지 않아도 간단히 설치를 할 수 있다.
현재 KIPI의 전략사업기획팀에 설치된 Test Server는 CentOS 5.5 이고, 이 경우 root로 바로 설치가 가능하다.
root로 설치를 하는 것이 과연 올바른가에 대한 문제는 여전히 남아있지만, 현재는 그렇게 설치되어 있다.

[설치방법]
. 설치 : yum -y install postgresql postgresql-server postgresql-odbc postgresql-jdbc postgresql-devel
. 설치확인 : rpm -qa | grep postgresql

위 처럼 설치하면, 기본적으로 PostgreSQL 7.xx version이 설치된다.

[기본설정]
설치가 종료된 후 기본적인 설정을 해 주어야 평상시 사용하는 것처럼 외부에서 DBMS에 접속 및 질의를 할 수 있다.
-----------------------------------------------------------------------------
vi /var/lib/pgsql/data/postgresql.conf
#-- 외부에서 접근할 수 있도록 아래 내용을 수정
listen_address='*'
port = 5432
max_connections = 100
vi /var/lib/pgsql/data/pg_hba.conf
#-- 외부에서 접근할 수 있도록 아래 내용을 추가
host    all         all         0.0.0.0/0               password
-----------------------------------------------------------------------------
[PostgreSQL의 시작과 종료]
PostgreSQL의 시작과 종료는 root로 한다. (이 부분은 root로 설치했으므로 root로 해야 할 듯..)
. 시작:/etc/init.d/postgresql start
. 종료:/etc/init.d/postgresql stop

[PostgreSQL 설치 후 postgres 계정 암호 설정]
외부에서 PGAdmin으로 접속을 위해서 postgres의 패스워드를 지정하자.
psql 로 접속한 후에 아래의 명령어로 설정하면 된다.
ALTER USER postgres WITH ENCRYPTED PASSWORD '<password>';


:
Posted by Elick
2011. 1. 6. 17:49

PostgreSQL을 선택하다. Work/PostgreSQL2011. 1. 6. 17:49

최근 이직을 한 회사에서 개발을 진행해야 할 건이 있는데 DBMS로 PostgreSQL을 선정했다.
이미 결정이 된 사항이라... 선정과정에는 참여할 수 없었고... 이런 저런 고민만 늘어간다.
어차피 할 수 없는 일보다 할 수 있는 일에 신경을 더 쓰는 것이 내 스타일에 더 잘 맞기에... 열심히 해보기로 하자.. ㅠㅠ

[역사]
PostgreSQL은 postgres에서 출발한다. postgres는 캘리포니아 버클리(UCB) 대학의 Michael Stonbraker 교수의 주도로 시작된 데이터베이스 연구 프로젝트였다. 처음에는 교육과 연구를 목적으로 개발되었으나 사용자 수의 증가에 따라 지원 부담이 커져서 4.2 버전을 마지막으로 postgres 프로젝트는 종료하게 된다. 
postgres 프로젝트는 그대로 끝나지 않고 postgres95와 Illustra 데이터베이스라는 두 개의 제품으로 탄생하게 된다. Illustra 데이터베이스를 postgres를 시작한 Michael Stonbraker 교수에 의해 상업용 버전으로 제품화한 것이다. 이후 Illustra는 Informix사에 인수되어 Informix Universal Server 제품과 통합되었다. postgres95는 postgres 프로젝트에 참가하고 있던 당시 UCB의 대학원생 Andrew Yu와 Jolly Chen에 의해 개발되었다. Postgres는 postgres95로 오면서 몇 가지 수정돼 특징을 갖는다. 
ANSI C를 따르도록 소스코드가 수정되어서 프로그램 크기가 25%로 작아지고 보기가 쉬워졌으며 질의 언어를 PostQuel에서 표준 SQL로 변경되었다. 기존 Postgres에 비해 30~50%정도의 성능 향상을 가져 왔고 라이선스를 수정해 상용화가 가능해 졌다. 그러나 Andrew Yu와 Jolly Chen가 졸업하면서 또 한번의 개발이 멈추는 위기를 맞게 되지만 캐나다의 Marc G. Fournier씨가 주관하는 현재의 개발팀이 인수받아 계속 이루어지고 있다. 1997년 1월에 나온 6.0 버전부터는 Postgres95라는 이름이 적절하지 않아 PostgreSQL로 이름이 바뀌었으며, 최근까지 9.0.x 버전이 발표되었다.

[저작권]
PostgreSQL 저작권은 기본적으로 소스코드까지 공개되어 있으며, GPL과 다른 공유 성격을 가진 Berkeyly 라이선스를 기반으로 배포되고 있으며, 임의의 목적에 사용과 복사, 수정, 및 배포에 대해서 자유로우며, 관련된 어떤 보증도 제공하지는 않고 있다.

:
Posted by Elick