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
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 31
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4457
3993 회원가입이 3명이상 안돼요.. 1 딩이 2010.07.08 7846
3992 회사 서버에 접속을 할려면 설정이 다른가요? 2 후니 2009.07.14 10577
3991 홈경로 databases.txt 질문드립니다 1 큐브리드드 2023.07.17 92
3990 홀따옴표 처리 문의 1 초보 2010.04.15 14679
3989 혼합형 데이터 정렬방법 1 큐키 2021.06.11 85
3988 혼합형 데이터 정렬 방법 1 큐키 2021.06.14 265
3987 혹시 큐브리드매니저 자동완성 끄는 기능 있나요 2 안지민 2012.09.05 6036
3986 혹시 큐브리드 매니져 기본글꼴을 고정폭으로 해주실 생각은 없으신가요... 1 안지민 2012.12.20 5768
3985 혹시 PHP5.3.0 버전에서 모듈 설치되신분 계신가요??? 4 senseplus 2009.07.13 9394
3984 혹시 MMDB 지원하나요? 1 tekkal 2009.01.31 17480
3983 호스트 추가시 발생되는 오류에 대해 문의 합니다. 1 거북이사촌 2015.01.06 5259
3982 호스트 추가 질문입니다. 7 몽유객 2010.12.21 13808
3981 호스트 추가 1 karay2k 2011.12.17 17928
3980 호스트 연결이 안됩니다. 3 file 미드소나 2013.01.01 7752
3979 호스트 연결이 안되요.(비밀번호오류) 2 양희종 2011.09.06 13919
3978 호스트 연결이 무한 로딩도네요 1 file 큐브리드사용자 2022.10.20 119
3977 호스트 연결이 되지 않습니다. 3 file Juooon 2013.07.24 9235
3976 호스트 연결 에러 3 secret PJEPJE 2016.01.28 10
3975 형변환 오류 문의 1 삽질중 2009.12.30 12969
3974 현재 큐브리드 7.1 을 사용하고 있는데요 1 헬리 2009.10.01 8770
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 200 Next
/ 200

Contact Cubrid

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