Background Image

FORUM

조회 수 10841 추천 수 0 댓글 13
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

현재 CUBRID DB로 된 프로젝트에 DB 부하 테스트 중인데

약 5만건의 데이터 가 들어있는 테이블의 일반 단순쿼리 페이지(쿼리 2개 정도)에서

F5을 4초정도만 계속 누르고 있으면 ACTIVE_SESSION 이 48수치에 DB 다운되어 버립니다.

혹은 2초 정도 눌러도 20이상 올라가서 ACTIVE_SESSION 이  내려오지를 않습니다.

DB서버 메모리는 4M, 현재 비서비스중인 테스트 서버 입니다., DB close는 매 처리시 해주고 있습니다.

혹시 브로커 속성값이나., 메모리를 더 늘려야 되는 현상인지..

이것만으로 파악하기 힘드시겠지만....

더 필요하신 내용이 있으시면 알아봐 드리겠습니다.

참고로 broker 속성값은 디폴트에서 SESSION_TIMEOUT 값은 3000(기본값)도 했다가 지금 10값으로 되어 있습니다.

F5로 테스트 하는것은 비정상적인 방법인데 업체측에서 용납을 못하네요..

수고하세요

 

매니져 :

버전:2008 R2.2
빌드 번호:8.2.2.0261

 

서버 :

2008 R2.2(8.22.0261)

  • ?
    cubebridge 2010.07.26 19:45

    일단 F5를 이용한 테스트 방법은 비정상적이라 할 수 있습니다.


    그리고, active session이 48이라고 하시는 것은 cubrid broker status를 이용해서 확인하신 것인지요? 이를 통해 확인한 것의 status가 Busy로 계속 연결되어 있는 것을 말씀하신다면 단순 쿼리가 많은 결과 값을 가져오거나 성능이 떨어지는 상태일 수도 있습니다.


    cmd창에서의 cubrid broker status의 결과와 사용하신 쿼리 그리고 쿼리의 대상이 되는 테이블의 구조를 올려 주신다면 원인 파악에 도움이 될 것으로 보입니다. F5를 이용한 테스트의 경우 잘못된 쿼리(결과가 제대로 나오지 않는 것뿐 아니라 과도한 I/O작업을 일이키는)를 사용할 경우 장애의 원인이 될 수도 있습니다.

  • ?
    남재우 2010.07.27 08:31

    F5를 계속 누르고 있으면 서버로 굉장히 짧은 시간에 반복적으로 많은 요청이 들어오게 됩니다. 2초 정도에도 그 정도 상황이라면 서버에서 수행되는 웹페이지 소스, 데이터베이스로의 질의 등에 대하여 문제를 확인해 보시는 것이 좋습니다.

    앞서 말씀드린 것처럼 cubrid broker status 를 통하여 처리 상태를 보시고, BUSY인 상태가 많다면 질의의 수행 성능에 문제가 있을 수 있습니다.

  • ?
    안토니오 2010.07.28 01:17

    CREATE TABLE "test_art"(
    "art_no" integer NOT NULL,
    "user_no" integer NOT NULL,
    "art_kwd_no" integer,
    "art_isu_kwd_no" integer,
    "cat_no" integer NOT NULL,
    "cat_hash" character varying(1024) NOT NULL,
    "sort_no" integer DEFAULT 1 NOT NULL,
    "writer_name" character varying(1024),
    "writer_email" character varying(1024),
    "title" character varying(1024),
    "note" character varying(1024),
    "vote_no" integer,
    "part_cnt" integer,
    "attach_cnt" integer,
    "view_cnt" integer,
    "comment_cnt" integer,
    "title_photo" character varying(1024),
    "title_photo_shared" character(1),
    "title_photo_w" integer,
    "title_photo_h" integer,
    "status" character(1) DEFAULT '2' NOT NULL,
    "regdate" timestamp,
    "chgdate" timestamp,
    "pubdate" timestamp,
    "admin_note" character varying(1024),
    "edtor_note" character varying(1024),
    "to_writer" character varying(1024),
    "is_review" character(1),
    "is_headline" character(1),
    "banner_class_no" integer,
    "link_catno" integer,
    "url" character varying(1024),
    "media_title" character varying(1024),
    "news_title" character varying(1024),
    "fullbody" character varying(1073741823),
    "tags" character varying(1024) DEFAULT 'NULL',
    "subdate" timestamp,
    "sub_title" character varying(1024),
    "site_id" integer NOT NULL,
    "title_movie" character varying(2048),
    "title_movie_shared" character(1) DEFAULT '0',
    "head_title" character varying(1024),
    "head_body" character varying(4096),
    "art_kwd_no_arr" set_of(integer),
    "rejdate" timestamp,
    "related" character varying(1024),
    "mod_user_no" integer,
    "mod_writer_name" character varying(1024),
    "mod_writer_email" character varying(1024),
    "naver" integer DEFAULT 0,
    "yahoo" integer DEFAULT 0,
    "paran" integer DEFAULT 0,
    "nate" integer DEFAULT 0,
    "pub_dir" character varying(64),
    CONSTRAINT pk_mynews_art_site_id_art_no PRIMARY KEY("site_id","art_no")
    );
    CREATE  INDEX "ix_mynews_art_03_bestview" ON "mynews_art"("cat_no","status","pubdate");
    CREATE  INDEX "ix_mynews_art_04_review" ON "mynews_art"("art_no","status");
    CREATE  INDEX "ix_mynews_art_edit_list2" ON "mynews_art"("site_id","subdate" DESC,"status");
    CREATE  INDEX "ix_mynews_art_list_pubdate" ON "mynews_art"("site_id","pubdate" DESC,"status");

     

     

    select * from test_art where site_id=111 AND art_no=1000

    총 데이터는 4만건, 쿼리 수행후 DB 커넥트를 해제 햇습니다.

    ACTIVE_SESSION 수치는 CM의 상태모니터(Brokers Status)에서의 수치입니다.

    F5으로 6초 정도 누르니 다운되네요

    -----------------

    broker1의 속성입니다.
    수정된것만, SESSION_TIMEOUT 10, LONG_QUERTY_TIME 60, LONG_TRANSACTION_TIME 60
    입니다.

  • ?
    남재우 2010.07.28 02:41

    필드중 일부는 상당히 크기가 큰데요. 모든 질의에서 항상 바로보는 데이터가 아니라면 레코드를 분리하여 별도의 테이블로 가져가는 것이 좋습니다.

    6초 정도 눌려서 다운된다는 것이 서버가 다운된다는 의미인가요?  아니면 ie가 더이상 반응을 하지 않는다는 것인가요? 일단 서버쪽의 문제가 있다면 좀더 정보가 필요합니다.

    일단 cubrid broker status 을 보여주시고요, conf/cubrid_broker.conf 를 올려주시면 검토해 보도록 하겠습니다. 그리고 연결에 사용하는 포트도 알려주세요.


    실상 의미없는 테스트라는 것을 이미 잘알고 계시니... 그 테스트보다는 tps나 다른 성능 측정을 해보시는 것이 좋을 것 같습니다.


  • ?
    노랑배 2010.07.28 03:19

    요청하신 정보를 대신 올려드립니다.

     

    커맨드 상에서의 cubrid broker status 값은 프로세스가 49개이며 모두 BUSY 상태입니다.

    말씀하신 다운의 의미는 서버가 완전 다운되는 상황은 아닙니다.

    서버에 부하가 높은 경우나 DB접속이 안되는 경우입니다.

     

    conf/cubrid.conf 입니다.

     

    data_buffer_pages=250000

    sort_buffer_pages=100

    log_buffer_pages=3000

    이 외에 모든값은 기본값입니다.

     

  • ?
    남재우 2010.07.28 07:24

    cubrid broker status 의 결과를 올려주세요. 그리고 화일이 잘못되었네요. conf/cubrid_broker.conf 을 그대로 올려주세요.

  • ?
    노랑배 2010.07.28 22:14 SECRET

    "비밀글입니다."

  • ?
    남재우 2010.07.30 04:20

    질의가 무거워보입니다. 데이터 건수가 많다면 검색시 정렬로 인한 부하로 질의 성능이 느려지고 당연히 계속된 F5로 전체적인 성능이 느려질 수 밖에 없습니다.

    create index idx1 on mynews_art(site_id, pubdate desc), create index idx2 on mynews_cat_lnk(art_no,site_id) 정도의 인덱스가 필요해 보이며

    select /*+ ordered */ ... from .. where .. and rownum between 1 and 15 using index idx1(+), idx2(+) 와 같은 형태로 하여 인덱스를 이용한 정렬로 변경해 보기 바랍니다.

     

  • ?
    방문객 2010.08.06 02:22

    이슈를 보면서 간단히 의견을 적어 봅니다.

     

    1. 먼제 말씀하신 Active Session이 50 이하까지만 올라가는 것은 두 가지 설정을 참고해 보셔야 합니다.

    - cubrid.conf의 max_clients값이 50(디폴트)으로 되어 있을 것 같습니다.

      해당 데이터베이스에 동시에 접속할 수 있는 쓰레드 수를 정의하는 것으로 해당 응용과 시스템 환경에 따라 조정할 수 있습니다.

    - 해당 응용에서 사용하는 브로커의 최대 접속 가능한 값이 무엇인지 확인해 보셔야 합니다.

      기본적으로 브로커별로 max_num_appl_server의 값이 40으로 정의 되어 있습니다. (cubrid_broker.conf에서 보면 됨)

    - 이런 환경에서 웹 응용과 CM에서 동시에 접속한 서버 세션의 수가 최대값에 근접했다는 것을 의미하는 것으로 보면 될 것 같습니다.

      서버 내부적으로 사용하는 데몬 쓰레드도 있으니 이것도 감안하면 최대값까지 치고 올라갔다고 볼 수 있습니다.

     

    2. 성능 관련

    - 남재우님의 의견처럼 쿼리를 경량화 하고 메타 정보와 컨텐츠 정보를 분리하여 각각의 테이블로 유지하는 것이 좋겠다는 것에 동의합니다.

    - 더불어 위 시험과 같이 동일한 쿼리를 반복해서 수행하는 것은 아래 매뉴얼에 소개된 플랜캐시와 쿼리 캐시를 이용하면 좀 더 효율적일 것 같다는 생각이 듭니다.

      매뉴얼 참고 :  >  성능 튜닝  >  데이터베이스 서버 설정  >  쿼리 캐시 관련 파라미터

     

    도움이 되었길 바랍니다. ^_^

  • ?
    brightest 2010.08.06 21:20

    혹시 연결 상태를 유지시켜 주는 환경은 아닌지요?

    DBCP를 사용하거나 WAS같은 미들웨어 사용으로 connection pool을 유지하는 환경은 아닌가 해서요~.

     

    연결 상태를 유지하는 환경이라면 페이지 리프레시(F5 키)가 완료되었어도 ACTIVE_SESSION은 응용이 DB에 연결을 유지하고 있는 개수를 나타내는 것이므로 개수가 0이 되진 않을 것 같습니다.

  • ?
    brightest 2010.08.07 04:17

    ACTIVE_SESSION 관련하여 http://cafe.naver.com/studycubrid/663 에 글을 올렸으니 참고가 되셨으면 합니다~.

  • ?
    남재우 2010.08.07 21:27

    안녕하세요.

     

    많은 의견주신 두분께 감사드립니다....

     

    CUBRID 환경에서 동시 사용자수를 늘리기 위해서는 크게 2가지 설정이 필요합니다. 첫번째는 일단 CUBRID database 에서 받아들일 수 있는 연결의 개수이고, 두번째는 미들웨어인 CUBRID broker 단에서 받아들이는 연결의 개수입니다.

    이 두가지를 모두 조정해 주어야 동시사용자를 늘릴 수 있습니다. 물론 잘 아시겠지만 서버 리소스 문제도 있고, 또하나는 허용되는 접속자의 수를 늘린다고만 해서 성능이 좋아지지는 않습니다. 문제가 되는 질의, 업무로직 등에 대한 최적화가 우선이고 그 후 리소스 상태를 확인하여 접속자수를 늘려주어야 합니다.

    아울러 DBCP 등 풀링 문제는 현 CUBRID broker 의 기본설정으로도 문제없이 동작합니다. 다만 WAS 등에서 풀의 개수와 CUBRID 의 동시 사용자수는 같도록 조정해주셔야 합니다. 물론 접속은 30000번이 아닌 33000번을 이용하여 설정하기 바랍니다. 30000번은 CUBRID manager 의 질의편집기에서 사용하고 있으므로 이 쪽은 그냥 두시고 33000번으로 접속하도록 하기 바랍니다. 결국 CUBRID broker 로의 접속수는 응용에서의 접속(33000)수와 30000번의 기본 접속수인 40개를 합친 수 만큼 CUBRID 에서의 접속자수를 잡아주시면 됩니다.

    앞서 두분께서 답변해 주셨듯이 CUBRID 의 접속자수는 cubrid.conf max_client 의 값으로 조정되며, CUBRID broker 의 접속자수는 cubrid_broker.conf broker1 에 대하여 MAX_NUM_APPL_SERVER 의 수와 관련있습니다.

    마지막으로 플랜캐쉬는 기본적으로 설정되어있으며, 결과캐쉬는 검색위주의 시스템 즉, 데이터의 변경이 적은 데이터에 대하여 사용시에는 많은 효과를 얻을 수 있습니다.

  • ?
    샤롱스판 2010.09.02 21:27

    3.1매뉴얼에서 해당 부분 설명을 추가하였습니다. 감사합니다.


List of Articles
번호 제목 글쓴이 날짜 조회 수
120 BeginTrans 상태에서 검색 시 응답없음 발생 7 까망이 2011.04.22 14635
119 BLOB에 대한 자바 타입변환 문제.. 1 file ㅇㅇ 2013.01.28 9930
118 BLOB 타입 이미지를 JSP로 웹에 뿌려주려면 어떻게 해야하나요? 1 아워나 2014.07.07 14210
117 BLOB 데이터 select 질문 1 hyperhand 2009.12.23 12109
116 BIT형 데이터에 대한 where ... IN 쿼리 1 소라게 2010.03.10 10740
115 A트랜잭션에서 Update중인 row 를 B트랜잭션에서 Select 1 큐불리드 2015.12.25 5958
114 Auto Increment에 대한 질문입니다. 3 너랑이마녀 2016.02.18 7912
113 Audit 테이블 따로 존재하나요? 3 JIRAN 2019.07.01 63
112 Attempt to call a method related to scrollability of non-scrollable ResultSet. 오류 문의 1 cuins 2011.07.28 12461
111 Archive log 관리 질문 2 june2 2013.07.16 9012
110 Archive Log만으로 타임복구가 가능한가요? 4 핑핑크 2016.04.29 9743
109 Apm_setup7로 자동설치시 연동이 안되는데... 1 또랑 2010.11.08 8254
108 An IOException was caught during reading the inputstream. 오류 조치방법 좀 알려주세요. 1 ldev27 2019.10.29 45
107 An IOException was caught during reading the inputstream 1 익명2 2015.11.26 6813
106 An IOException was caught during reading the inputstream 1 익명2 2015.11.26 6619
105 Ado.net. ExecuteNonQuery의 반환값이 항상 0 입니다. 2 모비23 2019.01.08 320
104 Ado.NET : Cannot connect to CUBRID CAS 오류 2 websiter 2017.05.05 4747
103 AVG 함수관련 질문드려요 1 구름마음 2013.06.10 13467
102 AUTO_INCREMENT 컬럼 이용시 2 hyperhand 2009.12.22 16945
101 ARRAY 데이터 타입에 대한 SQL 질문 3 지용 2010.10.08 10060
Board Pagination Prev 1 ... 146 147 148 149 150 151 152 153 154 155 156 Next
/ 156

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2147 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales