by 구구기비 [2024.01.02 11:36:39]
안녕하세요. 궁금한게 있어 여쭈어봅니다.
오라클 버전은 19c이며, 하나의 프로시저로 대량의 데이터를 한번에 isnert하고 있습니다.
insert rTemp1 ( temp1, temp2, temp3, temp4 )
selcet *** from dual;
insert rTemp2 ( temp1, temp2, temp3, temp4 )
selcet *** from dual;
대충 이런 구조이며, 서로 fk가 있기때문에 한 트랜잭션에서 커밋을 하고자 합니다.
그런데, 저 테이블 중, 트리거에서 해당 트랜잭션 외 테이블에 insert 해주는 속도가 너무 느린데 원인 파악이 되지않습니다...
해당 insert문을 로컬에서 직접 실행 할 경우, 25분정도 소요되는데, 프로시저로 실행 시, 3배이상 더 소요가 되는데
혹시 오라클 자체에 이런 이슈가 있는지 아시는분은 답글 부탁드립니다.
감사합니다.
1. 프로시저 내 쿼리와 직접실행 쿼리가 다른 경우
- 프로시져 내 쿼리는 바인드 변수로 조건을 주고 있는데
- 직접 실행 시 바인드 변수가 아닌 상수값을 조건으로 주고 실행한 것은 아닌지요?
- 두 쿼리가 다르다면? 실행계획도 다를 수 있습니다.
2. 트리거 동작 로직중에 비효율은 없는지?
- 비효율적인 로직이 있지는 않은지?
- 적절한 인덱스가 없는 것은 아닌지?