1. 소 개
CUBRID에서기본 설정으로 제공되는 동시 접속자 수는 약 50이내이다. 동시접속자 수가 더많은 환경에서는 MAX_NUM_APPL_SERVER라는브로커 파라미터와 max_clients라는서버 파라미터를 수정하여야 한다.
max_clients : DB서버가 허용하는 동시접속 개수를 설정하며, 디폴트 값은 50이다.
MAX_NUM_APPL_SERVER: 해당 브로커가 허용하는 CAS 프로세스의 동시접속 개수를 설정하며, 디폴트 값은 40이다.
CAS 프로세스 1개는 여러개의 connection을처리할 수 있기때문에 MAX_NUM_APPL_SERVER 값이 40이더라도 실제처리 가능한 동시 connection 수는 이보다 훨씬 많다.
2. 동시접속자의 수가 200 명인경우 파라미터 설정하기
2.1 cubrid_broker.conf 파일에서 [%BROKER1]의 MAX_NUM_APPL_SERVER 값을변경한다.
서버 리소스가 충분하다면 안전하게 MAX_NUM_APPL_SERVER=200으로설정한다.(실제처리 가능한 동시 connection 수는 이보다 훨씬 많을것이다)
서버 리소스를 효율적으로 사용하려면 운영환경을 모니터링하면서 MAX_NUM_APPL_SERVER=50이상~200이하인 값으로 설정한다.
2.2 cubrid.conf 파일에서 max_client 파라미터를 MAX_NUM_APPL_SERVER 값의 1.2배 수준으로 설정하기.
2.3파라미터가 적용을 위해브로커와 DB를재구동한다.
3. 관련매뉴얼 및 튜토리얼 링크
http://www.cubrid.com/zbxe/57153
http://www.cubrid.com/zbxe/65384#comment_65399
http://www.cubrid.com/online_manual/cubrid_830/pm/pm_db_classify_connect.htm
http://www.cubrid.com/online_manual/cubrid_830/admin/admin_service_server_start.htm
http://www.cubrid.com/online_manual/cubrid_830/admin/admin_service_broker_all.htm
------------------------------------------------------------------------------------------------------------------------------------------------------------
CUBRID에서 동시 접속자와 관련 있는 파라미터는
MAX_NUM_APPL_SERVER 라는 브로커 파라미터와 max_clients라는 서버 파라미터이다.
기본적으로 MAX_NUM_APPL_SERVER 파라미터를 조정하여 CAS 개수를 응용 클라이언트 갯수(연결 요청 수)보다 많게 설정하는 것이 중요하다.
응용 클라이언트와 브로커의 CAS가 연결을 맺고 트랜잭션 처리 후 종료되면 해당 CAS가 유휴상태가 되고
브로커는 다음 응용 요청에 대해 유휴상태의 CAS들과 연결을 맺어준다.
문제는 파일 다운로드와 같이 트랜잭션 시간이 상당히 긴 경우, 한개 트랜잭션 내에 복수개의 쿼리라 실행되도록 응용 로직이 구현되어 있는 경우, 이러한 긴 트랜잭션들이 동시 수행되는 경우 모든 CAS들이 클라이언트에 묶여 있게 되어 브로커가 새로운 연결 요청을 처리하지 못하고 무한 대기에 빠질 수 있다는 점이다.
이러한 문제를 근본적으로 해결하는 방법은 응용 프로그램에서 트랜잭션 단위를 작게 만들어야 한다.
그러나 응용 프로그램 코드 변경이 쉽지 않을 경우 CUBRID에서 브로커 파라미터로 제공하는 SELECT_AUTO_COMMIT를 설정하여 응용에서 수행하는 SELECT문에 대해 오토 커밋되도록 설정할 수 있다. 이 경우 CAS가 내부적으로 SELECT 문 실행 후 트랜잭션을 커밋하게 되므로 동시에 연결 요청이 집중되는 상황에서도 유휴 CAS를 더 많이 확보할 수 있게 된다.
이러한 SELECT_AUTO_COMMIT 파라미터는 브로커 실행 중에도 변경 가능하다.
-----------------------------------------------------------------------------
1) broker 가 현재 실행 중일 때 변경 방법
- cubrid broker status -b 로 현재 적용하고자 하는 broker 이름을 확인합니다.
- 대상 브로커에 대해 broker_changer 를 실행하여 파라미터를 추가합니다.
[cubrid@mdb.002 ~]$ cubrid broker status -b
@ cubrid broker status
NAME PID PORT AS JQ REQ TPS QPS LONG-T LONG-Q ERR-Q
===========================================================================
* query_editor 26832 30000 1 0 0 0 0 0/60.0 0/60.0 0
* broker1 26866 33000 29 0 1854013 1500655 8387645 127/60.0 139/60.0 208
[cubrid@mdb.002 ~]$ broker_changer broker1 SELECT_AUTO_COMMIT ON
OK
2) broker 가 현재 정지 중일 때 변경 방법
- $CUBRID/conf/cubrid_broker.conf 내 해당 브로커(broker1)에 SELECT_AUTO_COMMIT 파라미터를 추가한 후 저장합니다.
- cubrid broker restart broker1을 수행하면 새로 저장한 cubrid_broker.conf 파일이 적용됩니다.
[%BROKER1]
SERVICE =ON
BROKER_PORT =33000
MIN_NUM_APPL_SERVER =10
MAX_NUM_APPL_SERVER =100
APPL_SERVER_SHM_ID =33000
#LOG_DIR =log/broker/sql_log
LOG_DIR =/home1/cubrid/sql_log
ERROR_LOG_DIR =log/broker/error_log
SQL_LOG =ON
TIME_TO_KILL =120
SESSION_TIMEOUT =300
KEEP_CONNECTION =AUTO
SELECT_AUTO_COMMIT =ON
[cubrid@mdb.002 ~]$ cubrid broker restart broker1
관련 매뉴얼:
http://www.cubrid.com/online_manual/cubrid_830/pm/pm_broker_one.htm
http://www.cubrid.com/online_manual/cubrid_830/api/api_cci_endtran.htm