대용량 데이터를 처리하다 보면 다음과 같은 에러가 발생할 때가 있다.
해당 에러는 장시간 쿼리를 수행하는 동안 다른 트랜잭션에 의해 롤백 세그먼트에 변경이 일어나서 발생한다고 한다.
필자 역시 5분만에 잘 끝나던 쿼리가 갑자기 데이터가 변경되면서 5시간 동안 쿼리가 끝나지 않아 발생한 에러였다.
오라클 DB 툴을 이용하여 실행 계획을 볼 수 있으나 실제 운영 서버에서 실행한 오라클 플랜이 다르게 돌아갈 수도 있다고 한다. 결국 툴을 이용한 실행 계획만으로는 정확하게 쿼리 속도 저하의 원인을 못 잡을수도 있다.
해결방안
튜닝 요청 결과 각 조인이 일어나는 테이블 중 몇 개 테이블에 HINT를 추가하였다. /*+ INDEX(table명 index명) */ 을 통해 고정 인덱스를 태우도록 변경하였다. (실행 계획 중 몇 개 테이블이 PK 인덱스를 안타는 테이블이 있었다.)
더불어 불필요한 임시 데이터 수집의 개수를 줄였다.
INSERT 문에서는 PARARREL 과 APPEND 힌트를 사용해보고 nologging 명령어도 속도 처리에 좋은 효과를 낼 수 있다고 한다.
그렇게 튜닝을 하니 몇 시간동안 끝나지 않던 쿼리가 3분만에 처리되면서 위의 에러가 발생하지 않았다.
반응형
그리드형
'개발자의 시선 > 개발자' 카테고리의 다른 글
[이클립스] 제공받은 WSDL로 소스 임포트하기 (0) | 2020.12.12 |
---|---|
[fanatical] 프로그래밍(C++,JAVA,PYTHON) 번들 무료 배포 (영어) (0) | 2020.09.16 |
온라인 IDE 리플릿 소개 (repl.it) (0) | 2020.08.23 |
[ORACLE] ORA-01489 문자열 연결의 결과가 너무 깁니다. (0) | 2020.03.23 |
[ORACLE] ORA-01002 인출 시퀀스가 틀립니다. (0) | 2019.06.22 |
JAVA 인증서 파일 추가 (JAVA certification import) (0) | 2019.05.16 |
알고리즘 문제 및 풀이 사이트 소개 (leetcode) (0) | 2019.02.16 |
로또 조합기 V1.0 (0) | 2019.01.27 |