2026, 새로운 도약을 시작합니다.

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

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개

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

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

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

서버 사양을 올렸습니다.

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

답변에 대한 댓글 1개

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

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

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

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

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

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

답변에 대한 댓글 1개

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

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

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

로그인
🐛 버그신고