테스트 사이트 - 개발 중인 베타 버전입니다

데이터가 많은 db insert 슬로우 쿼리 채택완료

전영수 5년 전 조회 3,481

insert into rcpl_doc_KeyVal(
            uk_no,
            ex,
            ta,
            val,
            scsDate
        )values(
            (select IFNULL(max(uk_no)+1,1) from rcpl_doc_KeyVal af),
            '#{ex}' ,
            #{ta},
            #{val},
             (select DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%S') from dual)
        )

 

대략 이런 insert 쿼리입니다.. 

현재 실 데이터가 400만건 넘게있는데 이게 특정 url을 접속할때마다 쌓여갑니다. ( 초당20번정도 접속)

이경우 서버 cpu 사용률이 100프로를 뚫어서 400프로까지 가버리는데

테이블을 나눠야 하는지 아니면 다른 insert 최적화 쿼리가 있는지 궁금합니다.

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트

파티셔닝 하시면 됩니다. 개수는 대략 100만개로 잡으시면 될것 같네요. 키값을 잘 정해서 진행하셔야 하구요. 조회가 빈번하면 마스터 슬레이브 형태로 디비 이중화도 필요합니다. 

 

ps)쿼리를 보면 mybatis 를 사용하여 oracle에 일력하는것 같네요.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

전영수
5년 전
좋은 정보및 조언감사합니다.
데이터가 하루에 100만건정도 insert 되어버리는데
날짜를 하루단위로 테이블을 생성해서 파티셔닝을 나눠야하나요?
키값을 날짜로 잡아도 가능한가요?

댓글을 작성하려면 로그인이 필요합니다.

T
5년 전

DB 최적화가 너무 복잡해서 저같은 경우에는

서버 사양을 올렸습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

전영수
5년 전
서버가 이미.. 헥사(6)코어를 사용하고 있어서.. 더올리기에는 애매한거같아서요

댓글을 작성하려면 로그인이 필요합니다.

그누위즈

서브쿼리가 2개나 돌아가서 그런듯한데

db구조 설계를 다시해보시는게 어떨지요

그리고 타 테이블에 인덱스를 걸어놓고 최대한 빨리 데이터를 참조할수 있게 하는 수 밖에 없지싶네요.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

전영수
5년 전
타 테이블에 인덱스를 걸고 하면 좀 빠르게 개선이 가능할까요?..
데이터가 없을때는 무리없이 돌아가는데 3~400만개씩 쌓이고나면 문제가 되더랍니다..

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인