Array Processing기능을 활용하면 한 번의 SQL 수행으로 다량의 로우를 동시에 insert/update/delete할 수 있습니다. 이는 네트워크를 통한 데이터베이스 Call을 감소시켜주고, 궁극적으로 SQL수행시간과 CPU 사용량을 획기적으로 줄여줍니다.
(앞 절의 납입방법별_월요금집계 테이블 응용)
Java 프로그램에서 Array Processing 이 10 과 1000일때 수행시간과 insert 할때 Execute Call을 비교해보겠습니다.
10일때
- 126.82초 , insert 시 150000번의 Execute Call 발생
1000일때
- 1.21초, insert 시 30번의 Execute Call 발생
inesert 된 로우 수가 150,000건이므로 매번 5,000건씩 Array Processing한 것을 알 수 있습니다. 커서에서 Fetch되는 각 로우마다 5번 씩 insert를 수행하는데, 1,000로우마다 한 번씩 executeBatch를 수행하기 때문에 얻게 된 결과입니다.
참고로 select결과를 Fetch할 때도 1,000개 단위로 Array Fetch하도록 조정하였고, 30,000건을 읽는데 Fetch Call이 31회만 발생하였습니다.
Java에서는 FetchSize를 조정하지 않으면 기본적으로 10개 단위로 Array Fetch를 수행합니다.
위의 표는 앞 절에서 수행한 3가지 테스트(PL/SQL,JAVA(array가 10),One-SQL)와 방금 확인한 java(array가 1000)결과를 표로 정리한 것입니다.
네트워크를 경유해 발생하는 데이터베이스 Call이 얼마만큼 심각한 성능부하를 일으키는지 알 수 있습니다. 그 뿐 아니라 One-SQL로 통합하지 않더라도 Array Processing만으로 그에 버금가는 성능개선 효과를 얻을 수 있음을 확인 할 수 있습니다.
Array Processing효과가 극대화되려면 연속된 일련의 처리과정이 모두 Array 단위로 진행되어야 합니다. 이를테면, 앞선 단계에서 Array단위로 수천 건씩 아무리 빠르게 Fetch하더라도 다음 단계에서 수행될 insert가 건건이 처리된다면 그 효과가 미비할 것이며 반대의 경우도 마찬가지입니다.
참고로, EXP,IMP명령을 통해 데이터를 export,import할 때도 내부적으로 Array Processing이 활용되며 그만큼 대용량 데이터를 처리하는 데 있어 Array Processing은 필수적인 요소입니다.
해당 기능을 지원하는 인터페이스가 프로그램 언어별로 각기 다르므로 API를 통해 확인하고 이를 잘 활용하여야 합니다.
'스터디 > 오라클 성능고도화 원리와 해법1' 카테고리의 다른 글
05.데이터베이스 Call 최소화 원리 - 06. 페이지 처리의 중요성 (0) | 2020.02.02 |
---|---|
05.데이터베이스 Call 최소화 원리 - 05. Fetch Call 최소화 (2) | 2020.01.30 |
05.데이터베이스 Call 최소화 원리 - 03. 데이터베이스 Call이 성능에 미치는 영향 (0) | 2020.01.28 |
05.데이터베이스 Call 최소화 원리 - 02.User Call vs. Recursive Call (0) | 2020.01.22 |
05.데이터베이스 Call 최소화 원리 - 01.Call 통계 (0) | 2020.01.21 |
댓글