제목 대로입니당..
뒷북이라믄 할 말 없지만..
혹시나 저같은 닭질을 누군가 하실까봐 올립니다
==========================================================
= 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 임다
|