Shared Memory는 프로세스와 프로세스간에 메모리를 공유하도록 하여, 프로세스간 정보를 쉽게 공유하거나 교환할 수 있도록 하여 줍니다.
CUBRID에서는 이 Shared Memory를 CUBRID Broker가 사용합니다. Broker는 Shared Memory에 cub_cas의 상태 정보를 저장하며, Shared Memory에 저장된 cub_cas의 상태 정보를 참조하여 응용 클라이언트와의 연결을 중계합니다. Shared Memory에 저장된 cub_cas의 상태 정보를 통해 System Administrator는 어떤 cub_cas가 작업을 수행중이며, 어떤 응용 클라이언트의 요청을 처리 중인지 확인을 할 수 있습니다.
리눅스에서 Shared Memory는 ipcs 명령을 통해서 확인 가능합니다. ipcs 명령어는 Shared Memory, Semaphore, Message Queues의 자원을 사용하는 IPC(Inter Process Communication)의 상태를 출력합니다.
아래는 ipcs 명령의 사용했을 때의 출력입니다.
[imjoony83@newTest2 conf]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00030001 6619137 imjoony83 644 1860 2
0x00030000 6651920 imjoony83 644 77832 6
0x00033000 6684693 imjoony83 644 77832 6
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
이중 붉은 글씨로 된 Shared Memory의 key값은 CUBRID Broker 가 사용하는 Shared Memory 이며, 이 값은 $CUBRID/cubrid_broker.conf에서 MASTER_SHM_ID 와 APPL_SERVER_SHM_ID에 지정되어 있습니다. 30001, 30000, 33000 은 CUBRID 설치시 기본적으로 설정되는 값입니다. 자세히 보시면 아시겠지만 이 값은 10진수가 아니라 16진수 값 입니다.
[imjoony83@newtest3 conf]$ vi cubrid_broker.conf
[broker]
MASTER_SHM_ID =30001
ADMIN_LOG_FILE =log/broker/cubrid_broker.log
[%query_editor]
SERVICE =ON
BROKER_PORT =30000
MIN_NUM_APPL_SERVER =5
MAX_NUM_APPL_SERVER =40
APPL_SERVER_SHM_ID =30000
LOG_DIR =log/broker/sql_log
ERROR_LOG_DIR =log/broker/error_log
SQL_LOG =ON
TIME_TO_KILL =120
SESSION_TIMEOUT =300
KEEP_CONNECTION =AUTO
[%BROKER1]
SERVICE =ON
BROKER_PORT =33000
MIN_NUM_APPL_SERVER =5
MAX_NUM_APPL_SERVER =40
APPL_SERVER_SHM_ID =33000
LOG_DIR =log/broker/sql_log
ERROR_LOG_DIR =log/broker/error_log
SQL_LOG =ON
TIME_TO_KILL =120
SESSION_TIMEOUT =300
KEEP_CONNECTION =AUTO
리눅스의 ipcs 명령을 통해 CUBRID Broker가 사용하는 Shared Memory가 다른 process에 의해 사용되고 있는지 확인이 가능하며, 다른 processor 에 의해서 사용되고 있다면 CUBRID Broker 구동시 아래와 같은 에러가 발생합니다.
[imjoony83@newtest3 conf]$ cubrid broker start
@ cubrid broker start
query_editor: cannot create shared memory
++ cubrid broker start: fail
이 경우 ipcs를 수행시켜 보면 CUBRID Broker 가 사용하는 Shared Memory Key 값이 사용중인 것을 알 수 있으며, CUBRID Broker 가 다른 Key 값을 사용하도록 cubrid_broker.conf 에서의 key 값을 수정하여야 합니다.