Background Image

FORUM

조회 수 12033 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

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


큐브리드의 컴포지션 기능을 활용하여 테이블을 구성했습니다.

ymd_base
yy  char(4)     -----|
mm char(2)         |   PK
dd char(2)     ------|

counter
ymd ymd_base --|    Unique Index
cnt int


위와 같이 구성을 하고 아래와 같은 쿼리를 구성을 했습니다.

select cnt, incr(cnt) from counter where ymd.yy='2010' and ymd.mm='02' and ymd.dd='11';

cnt 값이 0 이상이면 위 쿼리로 종료를 하고 아니라면
ymd_base 테이블에 오늘 날짜의 yy,mm,dd가 있는지 select 해보고 없으면
insert를 하고 counter 테이블에는 무조건 insert를 하게 되어 있습니다.

그런데.. 아래와 같은 결과가 나옵니다.
초당 요청 수나 트랜젝션 수가 그렇게 많지는 않은 듯 한데..

CPU 사용률이 700% 정도 나오네요;;;;

큐브리드 설정 부분이 잘 못된 것인지..
아니면 쿼리나 테이블 구성 등을 잘못 쓰고 있는지 모르겠습니다.
그리고 PHP 에러 로그로 아래와 같이 찍힙니다..


PHP Warning:  Error: DBMS, -76, Your transaction (index 2, dba@ems|30432) timed out waiting on WRITE on page 0|2677. You are waiting for user(s) pd@ems|2950 to release the page lock.


감을.... 잘 못잡겠네요;;;;
CPU사용률이 높은 이유와..
위의 PHP에러가 발생하는 이유.. 에 대한 설명과 해결 방법을 문의 드립니다;;;

ps. 새해 복 많이 받으세요~




PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

30530 cubrid    15   0 1410m 143m 3140 S 731.2  1.9 517:57.53 cub_server


Process 30530 attached - interrupt to quit

select(1024, [9], NULL, [9], {3, 728000}) = 0 (Timeout)

fcntl(9, F_GETFL)                       = 0x2 (flags O_RDWR)

select(1024, [9], NULL, [9], {5, 0})    = 0 (Timeout)

fcntl(9, F_GETFL)                       = 0x2 (flags O_RDWR)

select(1024, [9], NULL, [9], {5, 0})    = 0 (Timeout)

fcntl(9, F_GETFL)                       = 0x2 (flags O_RDWR)

select(1024, [9], NULL, [9], {5, 0})    = 0 (Timeout)

fcntl(9, F_GETFL)                       = 0x2 (flags O_RDWR)

select(1024, [9], NULL, [9], {5, 0})    = 0 (Timeout)

fcntl(9, F_GETFL)                       = 0x2 (flags O_RDWR)

  • ?
    남재우 2010.02.16 19:14
    안녕하세요.
    답변이 늦어서 죄송합니다.
    일단 올려주신 예는 사용하기에는 적절치 않습니다. 왜냐하면 단순히 연월일을 참조하기 위해 별도의 테이블을 만든다는 것은 성능적인 관점에서는 한개의 테이블에서 가능한 데이터를 두개의 테이블을 참조해야 하기 때문입니다. 또한 검색과정에서 인덱스의 설정도 문제가 됩니다. 일단 ymd_base의 검색조건에 대한 인덱스가 있어야 함은 당연할 것으로 보이며, 예에서는 PK가 할당되어 있으니 문제는 없습니다.또한 컴포지션 구성시 중요한 것은 컴포지션 관계를 가지고 있는 필드에 대하여 인덱스가 필요할 수 있다는 것이며, 이와 같이 메인테이블에서의 검색이 아닌 참조되는 테이블에서 검색한 정보를 이용하는 경우에는 그 필드(counter 테이블의 ymd 필드)에 인덱스가 있어야 합니다. 예에서는 unique 설정이 되어있으니 또한 스키마 자체에는 문제는 없습니다.
    그러나 앞서 언급한 것처럼 두개의 테이블을 사용하면 하나의 테이블을 사용하는 것보다는 성능이 좋지 않습니다. 이점 충분히 고려해야 합니다.
    CPU 사용률이 높은 것은 데이터 건수(검색대상, 검색 결과 모두)와 관련이 있습니다. 아무래도 데이터가 많다면 CPU는 많이 사용될 것입니다. 다만 그 CPU가 CUBRID 관련 프로세스(cub_*)의 것인지, 아니면 전체적으로 사용률이 높게나오는 것인지 확인을 부탁합니다.
    또한 에러는 lock timeout 에 대한 부분입니다. lock을 잡으려고 대기하다가 주어진 시간동안 lock을 잡지못해 발생시키는 에러입니다. 따라서 에러를 내는 곳이 문제가 아니고 lock을 오래잡고 있는 곳을 찾아야 합니다. 이 작업중 다른 작업이 있었는지 확인을 부탁드립니다. 특히 관리상(스키마 작업, 대량의 데이터 입력/수정/삭제 등)의 작업이 있었는지 확인을 부탁합니다.

  • ?
    野花 2010.02.18 09:40
    답변 감사합니다.. ^^

    우선.. cpu 사용은 cub_server 에서 대부분 차지합니다.
    위에 top 내용을 적어 두었지만, cub_server 라는 프로세스 1개가 700% 이상 cpu를 점유하고 있습니다.
    그리고, strace로 프로세스를 확인해 보면 select를 하고 있는 것으로 보입니다.

    위에  QPS및 TSP 관련해서 첨부로 올렸지만, QPS는 많으면 50-60 정도입니다.
    MySQL innodb(메모리 4G용 my.cnf)로 비슷한(스키마와 인덱스, PK는 다름) 경우에도 QPS는 비슷한 수준으로 나옵니다.

    대부분의 쿼리는 select 후에 Update 및 Insert입니다.
    MySQL의 InnoDB에서도 select for update 등을 사용하더라도
    데드락이 4-5초 간격으로 계속 발생하여 on duplicate key update를 사용해서
    방지하고 있습니다. 

    위처럼 구성한 것은 컴포지션과 관련한 예제라던가 적절한 사용 후기 등이 없어
    이런 경우에 구성이 가능한 것인가 확인차 테스트를 해본 것입니다.

    어렵네요;;; 새로운 개념 적용 시키기가;;;
  • ?
    남재우 2010.02.19 00:42
    안녕하세요.
    CUBRID에서 구지 개체개념을 사용하실 필요는 없습니다. 그냥 관계형으로 편하게 사용하시길 권장합니다. 말씀하신 것처럼 새로운 개념은 사용법도 중요하지만 성능적인 관점이 항상 따라다니기 때문에 간단히 적용하기가 쉽지는 않습니다.
    참고로 select 후 update/insert 라면, 데이터가 있으면 update, 없으면 insert 를 하는 것으로 보입니다. 그렇다면 insert 가 많은 경우라면 insert 를 먼저하고 에러가 발생하면(unique error겠죠) update 를 하도록 하고, 그렇지 않고 update 가 많다면 update를 먼저해서 update 된 건수가 0건이면(이건 대부분의 프로그램에서 건수를 확인할 수 있으니) insert 를 하도록 하는 것도 성능을 올릴 수 있는 방법입니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 48
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
994 테스트 한 결과 때문에 질문글 올립니다... 2 secret 반짝이 2011.05.24 17
993 안녕하세요~ insert시 자동 증가값을 알고 싶어서 이렇게 글을 올립니다. 2 yongsu9 2011.05.21 13972
992 어떻게 해야하는건가요? 2 SoMa 2011.05.21 8233
991 2008 R3.1 Connection 오류 3 file 스카이 2011.05.20 9418
990 cubrid 7.3 -> 2008 r3.1 업그레이드 방법 1 스카이 2011.05.19 9513
989 SQL 에러 문의 드립니다. 1 호랑이새끼 2011.05.19 15399
988 php - cubird 연결 부분 오류 문제 문의 드립니다. 3 file 김우람 2011.05.19 34353
987 HA 구성에서 Manager로 대량등록(데이터 올리기) 확인 부탁드립니다... 5 반짝이 2011.05.19 25095
986 CMT 사용 에러 관련 문의 드립니다. 2 file yym3364 2011.05.18 8657
985 4.0 beta CUBRID HA관련 문제... 1 반짝이 2011.05.18 21610
984 jruby에서 jdbc 사용시 driver를 찾지못합니다 1 이니야 2011.05.17 13715
983 DB 오류 1 천인 2011.05.17 9086
982 Error extractiong support files 2 스카이 2011.05.17 8119
981 CUBRID 2008 R4.0 Beta HA 관련 질문입니다. 6 file 반짝이 2011.05.16 25848
980 [심각] 데이터가 많이 누적된 경우, ERROR -670 가 무조건 발생 2 secret 차오이 2011.05.13 11
979 답변 감사드립니다. 슬레이브DB에 관해 한가지더.. 질문... 1 닉넴 2011.05.13 8511
978 CUBRID 2008 R3.1 Patch 2 윈도우 버전은 없나요? 1 김우람 2011.05.13 8179
977 큐브리드 로그인되나, 정보 보이지 않음 1 file 큐브줴임스 2011.05.12 9902
976 복제기능에서 마스터 손상시... 1 닉넴 2011.05.09 8192
975 복제에 관해 복구 질문드려요 1 닉넴 2011.05.07 8217
Board Pagination Prev 1 ... 146 147 148 149 150 151 152 153 154 155 ... 200 Next
/ 200

Contact Cubrid

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