by 아이와사 [Oracle Tuning] 설계 대용량 테이블 쿼리 [2023.01.20 11:30:10]
안녕하세요.
현재 주문테이블 - 범위 조회 쿼리가 느려서 튜닝을 해보고 싶은데 아직 지식이 부족해 질문드립니다.
# 현재 상태
데이터베이스는 오라클 입니다.
주문 (Transaction) 이라는 테이블이 있고 생성일 (CreateDate), 완료일 (CompleteDate) 컬럼이 있습니다.
생성일 컬럼은 파티셔닝 키로 설정되어 있고 YYYYMM 기준으로 분할하고 있습니다.
완료일 컬럼은 인덱스가 없는 상태입니다.
처음 주문이 생성될 때 생성일은 SYSDATE, 완료일은 NULL 로 입력됩니다.
추후 결제가 완료되면 UPDATE문을 이용해서 완료일에 값을 넣고 있습니다.
월 마다 완료된 주문 건 (완료일에 값이 있는 주문 건)에 대해 정산을 합니다.
범위 지정도 완료일 컬럼으로 하고, 정렬도 완료일 컬럼으로 해야 합니다.
완료일은 파티셔닝키도아니고 인덱스도 아니기에 속도가 매우 느립니다.
월별 데이터 N천만건입니다.
# 질문
주문, 정산 도메인이 있는 서비스가 많을 텐데 위와 같은 문제를 보통 어떻게 처리하는지 궁금합니다..
하위질문1.
완료일을 파티셔닝 키로 지정해도 될까요?
검색해보니 파티셔닝 키는 성능 이슈때문에 되도록 업데이트를 하지 않는게 좋다고 하여 질문드립니다..
하위질문2.
완료일을 인덱스로 지정하는건 어떨까요..? 각 엔티티마다 업데이트가 최대 1번 일어나는데 이슈가 생길만큼은 아닐까요..?
하위질문3.
테이블 분리도 생각해봤습니다..
성공처리되기전의 주문을 버퍼처럼 관리하는 테이블에 넣어두고 완료가 되면 메인 주문테이블로 옮기는..방법은 어떨까요?
작은 규모의 서비스만 다루다가 조금 규모있는 서비스를 처음 접하다보니 이런 저런 질문이 많네요..
긴 질문 읽어주셔서 감사합니다..!