본문 바로가기
스터디/오라클 성능고도화 원리와 해법1

05.데이터베이스 Call 최소화 원리 - 02.User Call vs. Recursive Call

by 취미툰 2020. 1. 22.
반응형

앞에서는 데이터베이스 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가 깊어지게 프로그래밍하는것은 좋지 않습니다.

 

반응형

댓글