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 Q&A 1444 게시물 읽기
No. 1444
psql 6.x -> psql 7.0.2 업굴 & 공유 메모리 문제 (솔라리스 7에서..)
작성자
midnight
작성일
2000-07-21 02:23
조회수
7,418

제목 대로입니당..

뒷북이라믄 할 말 없지만..

혹시나 저같은 닭질을 누군가 하실까봐 올립니다

 

==========================================================

= SunOS 에서 PostgreSQL 6.5 를 7.0.2 로 업그레이드하기

=

= original author : m++ (Midnight_@hanmail.net)

= Last Update 7.20 23:57:45 KST 2000

==========================================================

 

 

 

 

 

1. 환경 :

 

 

SUNW Ultra/5_10; sparc; SunOS 5.7 (Solaris 7)

 

기존 psql 6.5 버전은 솔라리스 패키지가 아닌 tar 소스를 gcc 로 컴파일한 것이다

솔라리스에서 업그레이드가 아닌 설치를 하려 한다면 우선 몇가지 확인과정을 거쳐야 한다.

아래의 '솔라리스에서 PostgreSQL 6.5 설치시 참고사항' 을 먼저 읽어보기 바란다.

 

http://database.sarang.net/database/postgres/solaris/PgsqlSolaris.txt

 

 

 

2. 이전 데이터베이스 백업 :

 

 

psql 데이터 백업은 간단하게 dump 를 이용하여 실시한다.

기존 설정과 혹시 모를 상황을 고려하여 dump 와 함께 psql 디렉토리 전체를 tar 로 묶어 psql_6.5.tar 같은 형태로 저장해 두기를 권한다.

 

 

 

 

3. 빌드 :

 

 

psql 의 빌드는 가급적 postgres 계정으로 하기를 권한다.

빌드 전에, 백업이 끝난 기존 psql 디렉토리를 깨끗이 제거한다

 

$ rm /rf /usr/local/pgsql

 

소스를 풀고 컴파일을 하기 전에, postgres 계정의 .profile 을 적절히 수정해야 한다.

빌드가 끝난 후에 설정해도 늦지 않으나, 이 과정을 생략하면 절대 원하는 결과를 얻을 수 없다.

profile 설정과 컴파일 과정은 위 문서에 소개되어 있다.(반드시 gcc 로 컴파일해야 한다)

 

6.5 버전에서도 그랬듯, 7.x 버전에서도 컴파일시 두어가지의 에러가 발생했다.(7.0.1과 7.0.2 둘 다)

메세지를 보고 한두 줄만 주석처리 해주면 무난하게 컴파일 가능하다. //;;

 

필자의 경우 configure시 옵션은 //enable/multibyte //without/CXX 로 주었다.

//with/maxbackends=n 옵션을 주지 않으면 default로 maxbackends 는 32가 된다. 이것은 추후에 조정할

수 있으니 그냥 넘어가도 무방하다.

make 가 끝난 이후 'initdb /E EUC_KR' 과정까지 문제가 발생하면 앞서의 문서를 다시 한번 읽어보기 바란다.

 

 

 

 

4. 빌드후 환경 설정 :

 

 

필자의 경우 6.5 설치 이후, 다음과 같은 명령으로 아무런 문제 없이 시동되었다.

 

postmaster /i /S /D /usr/local/pgsql/data

 

그러나 7.0.2 버전에서 시동은 정상적으로 보이지만, 잠시후 사용자들의 접속이 일정 수를 초과하면 에러메세지를

출력하며 더이상 작동하지 않았다. 이는 maxbackends 의 값이 default 32 로 잡혀 있기 때문이다.

이 경우 /S 옵션을 빼고 /n 128 (예를 들어) 등으로 증가시켜 준다. 또한 /n 옵션은 /b 옵션과 같이 쓰여야 하기

때문에 적당한 값을 추가해 준다. /b 값은 /n 값의 2배에서 16배 이내여야 한다.(옵션에 대한 설명은 man 을 같이

설치했다면 참고할 수 있다)

 

그런데 시작 명령 옵션만 늘려준다고 끝나는 것은 아니다.

 

SunOS 의 커널 파라메터에서 디폴트 공유 메모리의 최대 세그먼트 크기는 psql을 운용하기에는 너무 낮게 설정

되어 있다. 앞서 6.5를 설치했다면 shmmax의 값을 0x7fffffff 로 수정했을 것이다.

필자의 경우 이 값을 다시 수정해야 했다. 아래는 필자의 설정 내용이다(설정은 /etc/system 파일끝에 추가하면 된다)

 

 

***************************************************

* set shmsys:shminfo_shmmax=268435456

* set shmsys:shminfo_shmmin=200

* set shmsys:shminfo_shmmni=200

* set shmsys:shminfo_shmseg=200

* set semsys:seminfo_semmap=250

* set semsys:seminfo_semmni=500

* set semsys:seminfo_semmns=500

* set semsys:seminfo_semmsl=500

* set semsys:seminfo_semmnu=500

* set semsys:seminfo_semume=100

***************************************************

set shmsys:shminfo_shmmax=134217728

set shmsys:shminfo_shmmin=100

set shmsys:shminfo_shmmni=100

set shmsys:shminfo_shmseg=100

set semsys:seminfo_semmap=120

set semsys:seminfo_semmni=250

set semsys:seminfo_semmns=250

set semsys:seminfo_semmsl=250

set semsys:seminfo_semmnu=250

set semsys:seminfo_semume=51

******************************************************

* set shmsys:shminfo_shmmax=0x7fffffff

* set shmsys:shminfo_shmmin=51

* set shmsys:shminfo_shmmni=51

* set shmsys:shminfo_shmseg=51

* set semsys:seminfo_semmap=60

* set semsys:seminfo_semmni=100

* set semsys:seminfo_semmns=100

* set semsys:seminfo_semmsl=100

* set semsys:seminfo_semmnu=100

* set semsys:seminfo_semume=50

 

 

위의 * 표는 주석이다. 필자의 경우 서비스 중인 시스템을 약 30여차례 재부팅 //;; 한 끝에 중간 값을

사용하고 있다. 참고로 맨 위는 대략 128MB 를 데이터베이스에 할당하는 시스템일 경우 설정이다.

각 항목의 의미는 다음과 같다.

 

 

shmsys:shminfo_shmmax Maximum shared memory segment size

shmsys:shminfo_shmmin Mininum shared memory segment size

shmsys:shminfo_shmmni Number of shared memory identifiers

shmsys:shminfo_shmseg Number of segments, per process

semsys:seminfo_semmap Number of entries in the semaphore map

semsys:seminfo_semmni Number of semaphore identifiers

semsys:seminfo_semmns Number of semaphores in the system

semsys:seminfo_semmsl Maximum number of semaphores, per id

semsys:seminfo_semmnu Number of processes using the undo facility

semsys:seminfo_semume Maximum number of undo structures per process

 

 

Solaris의 공유메모리에 대한 상세한 설명은 'How to Increase Shared Memory Segments' 문서에 있다.

 

http://docs.sun.com:80/ab2/coll.47.8/SYSADV2/@Ab2PageView/43079?DwebQuery=SEMMNS&Ab2Lang=ko&Ab2Enc=euc/kr

 

 

 

 

5. 주의 :

 

 

마지막으로, 시스템 시작시 시동 스크립트의 실행 순서에 주의하기 바란다.

이 역시 개인적인 상황일 수도 있으나, 필자의 경우 postgres 시동 스크립트를 맨 마지막에 두어야 했다.

Apache+PHP+PostgreSQL 환경에서 아파치보다 psql 이 먼저 나오면 아파치는 뜨지 않았다. 아마도 공유 메모리 문제

가 아닌가 싶다(이 문제는 /etc/system 설정을 아무리 바꾸어봐도 변하지 않았다)

또 일반적으로 Solaris 에서 가장 마지막으로 뜨는 dtlogin 서비스도 postgres 스크립트 뒤에 위치하면 작동하지 못

했다. 공유메모리 설정에 관계없이 postgres가 앞에 있으면 아무리 X /query 를 외쳐봐도 소용 없었다.

 

 

p.s .... GPL 임다

[Top]
No.
제목
작성자
작성일
조회
1452포스트 그레스 pg leaddata 에러...
최철웅
2000-07-25
7156
1456┕>Re: 포스트 그레스 pg leaddata 에러...
정재익
2000-07-26 00:27:28
7764
1451postgresql 설정
노인철
2000-07-25
7250
1454┕>Re: postgresql 설정
정재익
2000-07-25 23:49:10
8055
14458k이상의 text data를 한 field에 넣으려면 ????
정철
2000-07-21
7042
1447┕>Re: 8k이상의 text data를 한 field에 넣으려면 ????
정재익
2000-07-21 16:46:48
7684
1444psql 6.x -> psql 7.0.2 업굴 & 공유 메모리 문제 (솔라리스 7에서..)
midnight
2000-07-21
7418
1446┕>Re: psql 6.x -> psql 7.0.2 업굴 & 공유 메모리 문제 (솔라리스 7에서..)
정재익
2000-07-21 16:43:12
7316
1442dump 시 에러....
하늘
2000-07-20
6482
1443┕>Re: dump 시 에러....
정재익
2000-07-20 19:18:34
7350
1441JDBC Optional Package API 구현
나비아빠
2000-07-19
7034
1448┕>Re: JDBC Optional Package API 구현
주효식
2000-07-22 19:22:19
7254
1438commit work을 반드시 해줘야 하는건지요...
송봉준
2000-07-19
7050
1440┕>Re: commit work을 반드시 해줘야 하는건지요...
정재익
2000-07-19 15:06:41
7216
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.029초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다