장문의 글 잘 읽었습니다. 나름대로 좋은 정보도 포함하고 있군요. 사실 메모리 튜닝에 관해서는 많은 고민을 해 봐야 하는 문제입니다. 개인적인 생각으로는 곧 2.4.x stable 버전이 나올것이니 아마도 오라클도 그기에 맞추어서 한번더 컴파일되어 출시 될 것으로 판단됩니다. 좀더 나은 환경을 제공하지 않을까 생각중입니다.
sem.h 를 수정하고 나면 커널에 그냥 반영시킬 방법은 없습니다. 반드시 커널을 재 컴파일한 후에 rebooting 을 해 주는 수 밖에 없습니다. 커널 컴파일 방법은 이곳에서 모두 설명드리기에는 무리일 것 같고, http://kldp.org 에 가시면 좋은 문서들이 많이 있습니다. 이곳을 참고로 하시기 바랍니다.
>>조창훈 님께서 쓰시길<<
:: 안녕하세요.
:: 저는 서울교육방송에 근무하고 있는 조창훈이라는 사람입니다.
:: 다름이 아니고 이번에 오라클을 ML360서버(memory 2G, hard 18G, cpu xeon two processor)에 깔았습니
:: 다.(웹서버와 오라클서버는 따로입니다.)
:: 시스템은 레드헷 6.2 배포판(커널 2.2.14)입니다.
:: 근데 문제는 오라클은 문제없이 깔고 서버도 별이상없이 돌아가는데 사용자수가 갑자기 늘어나게 되면
:: 서버가 갑자기 느려지는겁니다.
:: 그래서 init[sid].ora파일에서 shared_pool_size를 좀더 많이 잡아주었습니다.
:: 그리고 나서 오라클 startup을 하니 다음과 같은 에러가 뜨는겁니다.
:: SVRMGR> startup;
:: ORA-27123: unable to attach to shared memory segment
:: Linux Error: 22: :N@{@}GQ @N<v
:: 곰곰히 생각해 보니 오라클을 설치할때 리눅스커널에서 IPC파라미터를 적절하게 설정하지 않고 디폴트
:: 로 깔아서 공유메모리가 부족해서 그런것이 아닌가하는 생각이 들었습니다.
::
::
:: 잠깐 문서의 한부분을 보여드리면,
:: "다음의 위치에 존재하는 커널 매개변수를 설정
:: /usr/src/linux/include/asm/shmparam.h
:: /usr/src/linux/include/linux/sem.h
:: # 공유메모리 세그먼트의 최대크기(SHMMAX)
:: # 공유메모리 세그먼트의 최소크기(SHMMIN)
:: # 시스템 내 공유 메모리 세그먼트들의 최대개수(SHMMNI)
:: # 사용자 프로세스 하나가 사용할수 있는 공유메모리 세스먼트의 최대개수(SHMSEG)
:: # 한개의 세마포어 세트에 존재할수 있는 세마포어의 최대개수(SHMMSL)
:: # 시스템 전체에서 할당할 수 있는 공유메모리 세그먼트의 최대 개수(SHMMNS)
:: # 한번의 semop call당 처리작업의 최대 회수(SEMOPM)
:: # 세마포어의 최대값(SEMVMX)
:: 허용 가능한 전체메모리의 크기는 다음과 같이 얻어진다.
:: SHMMAX * SHMSEG
:: 다음 표의 내용은 디폴트 initsid.ora 파일에 기반한 인스턴스 하나를 위한 권장 값이다. 만약 하나
:: 이상의 인스턴스를 인스톨 한다거나 initsid.ora 파일을 수정한다면 이 파라미터들을 변경해야 한다.
::
:: 파라미터 권장값 설명
:: SHMMAX 4294967295 한 개의 공유 메모리 세그먼트의 최대 크기 (바이트 단위로서, 4GB를 의미한다)
:: SHMMIN 1 한 개의 공유 메모리 세그먼트 최소 크기(바이트 단위)
:: SHMMNI 100 공유 메모리 식별자의 개수
:: SHMSEG 10 한 개의 프로세스에 연결될 수 있는 공유 메모리 세그먼트의 최대값
:: SEMMNS 200 시스템 내 세마포어의 개수
:: SEMMNI 100 시스템 내 세마포어 셋 식별자의 개수. SEMMNI는 어느 한 순간에 동시 사용될 수 있는 세
:: 마포어의 개수를 결정한다.
:: SEMMSL PROCESSES+10. 한 개의 세마포어 세트에 존재할 수 있는 세마포어의 최대 개수. initsid.ora
:: 의 PROCESSES+10으로 설정한다. 릴리스 8.1.5의 PROCESSES의 디폴트값은 50이다.
:: SEMOPM 100 한번의 semop call당 처리작업의 최대 회수
:: SEMVMX 32767 세마포어의 최대값
:: 이러한 내용들을 커널에 반영시키기 위해서는 소스 패키지의 내용을 고친 후에 커널을 컴파일 해야 한
:: 다. 이 같은 작업에 대해서는 여기에서 자세히 설명할 수 없으므로, Linux 운영체계와 관련된 서적이나
:: 문서를 참조하기 바란다.
:: 앞으로 진행하게 될 오라클 8i 서버 설치의 경우 개인적으로 사용할 데이터 베이스를 생성하게 될 것
:: 이며, 이를 위해서 SHMMAX를 4GB까지 잡을 필요는 없다. 참고로 RedHat의 기본 설정값은 16MB이다. 차
:: 후 규모있는 데이터베이스 운영을 하고자 하는 경우에는 규모에 따라 반드시 반영을 하도록 한다. 그리
:: 고 현재 사용중인 파라미터 값이 위의 표에서 제시한 값보다 큰 경우에는 그 값을 그대로 사용하는 것
:: 이 좋다. 위에서 제시한 값은 오라클 8i를 위해서 필요한 최소한의 필요값이므로 다른 애플리케이션을
:: 함게 사용한다면 더 큰 값이 필요할 수도 있다."
:: 이렇게 나와 있습니다.
:: 따라서 저도 "/usr/src/linux/include/asm/shmparam.h"과 "/usr/src/linux/include/linux/sem.h" 파일
:: 을 위의 설명대로 고칠려고 했더니 커널컴파일을 해야 된다고 나와 있더군요..
:: 즉, 이두개의 파일을 수정하는데 커널에 반영시키는 방법을 몰라서 이렇게 글을 쓰게 된겁니다. 커널
:: 을 업그레이드 하는것은 알겠는데 커널은 바꾸지 않고 단지 변경사항만 반영을 시킬려면 어떻게 해야
:: 하는지 좀 가르쳐 주셨으면 합니다. (제생각은 이게 C언어니까 그냥 컴파일처리만 하면 되는건지?)
:: 제가 너무 아는게 없어서 그러니 양해바라며 꼭좀 답변부탁드립니다.
:: 그럼이만..
::
|