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 118
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4475
1100 An IOException was caught during reading the inputstream. 오류 조치방법 좀 알려주세요. 1 ldev27 2019.10.29 316
1099 쿼리 실행시 응답이 없습니다. 1 scvjeong 2020.02.24 315
1098 큐브리드 서버 IP 변경시 바꿔줘야할 설정 있나요 ? 3 하이영 2020.06.02 315
1097 날짜 사이 데이터 구하기 2 cubrid초보 2021.06.29 314
1096 971번 에러 로그가 5초간격으로 쌓임 3 kidless 2020.01.15 313
1095 콤마로 split하는 기능 구현 관련 문의 5 플레이어블 2023.03.15 311
1094 백업시 한번 한 백업폴더에 다시 백업시 문제... 2 하일레곤 2017.11.23 311
1093 cubrid manager 데이터 가져오기 응답없음 10 ohgeumjin 2020.05.25 310
1092 오라클 트리거를 옮겨오고싶습니다. 1 지구인다 2018.09.28 310
1091 csql.err 로그에 대해 질문 올립니다. 1 dosem7 2018.01.10 309
1090 큐브리드 ha 구성 중에 master DB가 올라오지 않습니다. 11 samsam 2022.05.12 308
1089 cubrid javasp start fail 관련 문의드립니다. 5 file 범이 2022.03.14 307
1088 DB복구 질문 드립니다. 3 hoon 2017.11.07 306
1087 리눅스 서버 1대에 큐브리드를 여러개 설치 방법 문의 1 coolkkm 2018.02.22 305
1086 delete 시 in절에 컬럼이 두개일경우 느림현상 1 file 겸둥이k 2021.10.18 304
1085 오라클 마이그레이션 index 명칭 문의 입니다. 1 서훈아빠 2018.10.19 304
1084 큐브리드 파일 내보내기 스케줄 기능 문의 1 쿨쿨 2017.11.23 304
1083 unloaddb / loaddb 실행할 때 clob파일을 유지할 수 있는 방법 있을까요? 2 file 김동현 2021.03.12 304
1082 시점 복구 test 문서 연람 방법 문의 5 file 공중정원 2019.07.26 303
1081 Mac mojave 버전 큐브리드 설치 문제 1 norman 2019.07.18 303
Board Pagination Prev 1 ... 141 142 143 144 145 146 147 148 149 150 ... 200 Next
/ 200

Contact Cubrid

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