앞에서는 데이터베이스 Call을 커서의 활동상태에 따라 Parse,Execute,Fetch로 나누었는데, Call이 어디에서 발생하느냐에 따라 User Call과 Recursive Call로 나눌 수도 있습니다.
SQL트레이스 파일을 tkprof유틸리티로 포맷하면 아래쪽에 overall total통계를 볼 수 있습니다. non-recursive 통계가 user call이고 recursive 통계가 recursive call입니다.
User Call은 OCI(Oracle Call Interface)를 통해 오라클 외부로 들어오는 Call을 말합니다.
동시접속자 수가 적을때는 잘 드러나지 않지만 Peak시간대에 시스템 장애를 발생시키는 주범이기도 합니다. User Call이 많이 개발되도록 개발된 애플리케이션은 결코 좋은 성능을 낼 수 없습니다. 아래와 같은 기능과 기술을 활용해 User Call을 최소화하려는 노력을 해야 합니다.
- Loop쿼리를 해소하고 집합적 사고를 통해 One-SQL로 구현
- Array Processing : Array 단위 Fetch,Bulk insert/update/delete
- 부분범위처리 원리 활용
- 효과적인 화면 페이지 처리
- 사용자 정의 함수/프로시저/트리거의 적절한 활용
Recursive Call은 오라클 내부에서 발생하는 Call을 말합니다.
SQL파싱과 최적화 과정에서 발생하는 Data Dictionary 조회, PL/SQL로 작성된 사용자 정의 함수/프로시저/트리거 내에서의 SQL수행이 여기에 해당합니다.
Recursive Call을 최소화하려면 바인드변수를 적극적으로 사용해서 하드파싱 횟수를 줄여야합니다.
그리고 PL/SQL로 작성한 프로그램이 어떤 특징을 가지고 있는지 잘 이해하고 시의 적절하게 사용해야 합니다.(무분별한 사용은 하지 않아야 합니다)
SQL 트레이스에서 볼 수 있는 결과 중 recursive depth : 2라는 표시를 확인할 수 있습니다.
특정 프로시저를 호출했는데 거기서 또 다른 프로시저를 호출한 경우이며, 그 마지막 프로시저에서 사용된 SQL에 대한 수행통계인 것입니다.
recursive depth가 깊어지게 프로그래밍하는것은 좋지 않습니다.
'스터디 > 오라클 성능고도화 원리와 해법1' 카테고리의 다른 글
05.데이터베이스 Call 최소화 원리 - 04.Array Processing 활용 (0) | 2020.01.29 |
---|---|
05.데이터베이스 Call 최소화 원리 - 03. 데이터베이스 Call이 성능에 미치는 영향 (0) | 2020.01.28 |
05.데이터베이스 Call 최소화 원리 - 01.Call 통계 (0) | 2020.01.21 |
04.라이브러리 캐시 최적화 원리 - 11.Static SQL 구현을 위한 기법들 (0) | 2020.01.20 |
04.라이브러리 캐시 최적화 원리 - 10. Dynamic SQL 사용 기준 (0) | 2020.01.19 |
댓글