커피닉스, 시스템 엔지니어의 쉼터
  PostgreSQL에서 semaphore 에러발생시 작성일 : 2006/06/27 16:18
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 7677
     
    제  목 : PostgreSQL에서 semaphore 에러발생시
    작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
    작성일 : 2006.4.28(금)

    FreeBSD에서 PostgreSQL 설치후에 initdb 실행할 때, 다음과 같은 에러가 발생한다면 커널 파라미터에서
    semaphore 설정값을 늘려주면 해결이 가능하다.

     
    creating configuration files ... ok
    creating template1 database in /usr/local/pgsql/data/base/1 ...
    FATAL: could not create semaphores: No space left on device
    DETAIL: Failed system call was semget(1, 17, 03600).
    HINT: This error does *not* mean that you have run out of disk space.
    It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores (SEMMNS), would be exceeded. You need to raise the respective kernel parameter. Alternatively, reduce PostgreSQL's consumption of semaphores by reducing its max_connections parameter (currently 10).
    The PostgreSQL documentation contains more information about configuring your system for PostgreSQL.
    child process exited with exit code 1
    initdb: removing data directory "/usr/local/pgsql/data"
     


    먼저 semaphore 정보를 살펴보자.

     
    # ipcs -S
    seminfo:
            semmap:           30    (# of entries in semaphore map)
            semmni:           10    (# of semaphore identifiers)
            semmns:           60    (# of semaphores in system)
            semmnu:           30    (# of undo structures in system)
            semmsl:           60    (max # of semaphores per id)
            semopm:          100    (max # of operations per semop call)
            semume:           10    (max # of undo entries per process)
            semusz:           92    (size in bytes of undo structure)
            semvmx:        32767    (semaphore maximum value)
            semaem:        16384    (adjust on exit max value)
     


    이 값을 변경하려면 어떻게 해야할까? sysctl read-only 값이어서, sysctl 명령으로는 이들 설정 값을
    확인할 수는 있으나 수정은 할 수 없다. /boot/loader.conf 에 다음을 추가해주고 리부팅해줘야 한다.
    semmni = 10, semmns = 60인데 이를 약 2배 정도로만 올려본 경우이다.

     
    kern.ipc.semmni="20"
    kern.ipc.semmns="120"
     



    * 참고자료
      FreeBSD Handbook Chapter 11 Configuration and Tuning
      http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-sysctl.html



    커피닉스, 시스템 엔지니어의 쉼터 / URL : http://coffeenix.net/board_view.php?bd_code=1417