Background Image

FORUM

조회 수 12032 추천 수 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
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4443
867 테이블의 크기 1 카르마 2011.01.10 10880
866 큐브리드의 적정 데이터 수는 얼마나 되는 것인지 궁금합니다.. 1 스마트 2011.01.08 7974
865 Java에서 OID이용한 질의 1 지용 2011.01.08 7797
864 큐브리드 매니저 질의편집기 건의사항 1 유니콘 2011.01.08 7206
863 sort_buffer_pages 크기 설정 관련 문의 2 secret 스마트 2011.01.07 13
862 각 테이블의 크기와 rows 확인... 1 카르마 2011.01.07 15344
861 manager 완전 뚫렸음... [보안 대박 버그 발견] 2 큐브리드호스팅 2011.01.07 7928
860 CMT 버그 발견... 1 스마트 2011.01.06 7361
859 CUBRID-iBatis 에서 bigint 문제 답변 부탁드립니다... 5 반짝이 2011.01.06 12397
858 트랜잭션이(인덱스 1, dba@localhost|20383) 시스템에 의해 취소되었습니다. 1 스마트 2011.01.06 8012
857 데이터 페이지가 성능에 미치는 영향이 궁금합니다. 2 스마트 2011.01.05 8725
856 mac os x에서 cubrid 설치가능? 1 인성 2011.01.05 12930
855 사용자 추가 관련 질문입니다 1 beat 2011.01.05 7044
854 [긴급] 성능 문의 드립니다.... 8 secret 스마트 2011.01.05 31
853 xe의 큐브리드와 mysql의 스키마 구조 확인 요청. 2 스마트 2011.01.04 8614
852 [개선요청] 데이터베이스 복구 문제 개선이 필요할 것 같습니다.. 5 secret 스마트 2011.01.04 49
851 백업 및 복구에 대한 질문 드립니다 3 유니콘 2011.01.04 7478
850 cubrid bigint를 java로 가져오는데 문제가 있네요... 2 반짝이 2011.01.04 22137
849 테이블 정보를 가지고 오는 쿼리를 알고 싶습니다. 1 미스터비니 2011.01.04 9788
848 큐브리드 성능 문의 2 스마트 2011.01.03 9819
Board Pagination Prev 1 ... 152 153 154 155 156 157 158 159 160 161 ... 200 Next
/ 200

Contact Cubrid

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