2._User_Call_vs._Recursive_Call

조회 수 2208 추천 수 0 2013.08.21 12:34:19
정찬호 *.52.87.61
제목 작성자 날짜
2._User_Call_vs._Recursive_Call (current) 정찬호 2013.08.21 12:34:19
복원
<p>Call이 어디서 발생하느냐에 따라</p><p>1. User Call</p><p>2. Recursive Call</p><p><br /></p><p>그림1</p><p><br /></p><p>그림2</p><p><br /></p><p>1. User Call</p><p>&nbsp; 가. OCI(Oracle Call Interface)를 통해 Oracle 외부로부터 들어오는 Call을 말합니다.</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 그림2에서 보면 DBMS 입장에서의 사용자는 WAS이기 때문에 User Call이 클라이언트가 아닌 WAS에서 발생하게 됩니다.</p><p>&nbsp; 나. Peak 시간대에 시스템 장애 주범은 User Call인 경우가 많습니다.</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 애플리케이션의 설계와 프레임워크 기술 구조에 기인하는 경우가 많으며 Array Processing을 제대로 지원하지 않는 프레임 워크,</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 화면 페이지 처리에 대해 잘못 설계된 표준가이드, 사용자 정의 함수/프로시저에 대한 무조건적인 제약 등의 경우를 예로 들수 <br /></p><p>&nbsp;&nbsp;&nbsp;&nbsp; 있습니다.</p><p>&nbsp; 다. User Call을 최소화하기 위해서는</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (1) Loop쿼리를 해소하고 집합적 사고를 통해 One-SQL로 구현</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (2) Array Processing : Array 단위 Fetch, Bulk Insert/Update/Delete</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (3) 부분범위처리 원리 활용</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (4) 효과적인 화면 페이지 처리</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (5) 사용자 정의 함수/프로시저/트리거의 적절한 활용</p><p><br /></p><p>2. Recursive Call</p><p>&nbsp; 가. Oracle 내부에서 발생하는 Call을 말합니다.</p><p>&nbsp; 나. SQL파싱과 최적화 과정에서 발생하는 Data Dictionary 조회, PL/SQL로 작성된 사용자 정의 함수/프로시저/트리거</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 내에서의 SQL수행이 여기에 해당합니다.</p><p>&nbsp; 다. Recursive Call을 최소화하기 위해서는 바인드 변수를 적극적으로 사용해 하드파싱 발생회수를 줄여야 합니다.</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 그리고 PL/SQL의 시의 적절한 사용이 이루어져야 합니다.</p><p>&nbsp; 라. Recursive Depth의 경우 특정 프로시저를 호출했는데 거기서 또 다른 프로시저를 호출한 경우이며 그 정도가</p><p>&nbsp;&nbsp;&nbsp; 깊어지도록 프로그래밍하는 것은 바람직하지 않다. PL/SQL은 가상머신 상에서 수행되는 인터프리터언어이므로</p><p>&nbsp;&nbsp;&nbsp; 빈번한 호출 시 컨텍스트 스위칭 때문에 성능 저하현상이 발생합니다.</p><p><br /></p><p>그림3</p><p><br /></p><p>&nbsp; 마. 대용량 데이터 조회 쿼리에서 함수를 잘못 사용하면 성능이 극도로 저하되는 경우가 발생하는데 <br /></p><p>&nbsp;&nbsp;&nbsp; 함수를 부분범위처리하 가능한 상황에서 제한적으로 사용해야 하며, 될 수 있으면 조인 또는 스클라 서브쿼리 형태로</p><p>&nbsp;&nbsp;&nbsp; 변환하려는 노력이 필요합니다.</p><p><br /></p><p>그림4<br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p>
정찬호 2012.05.07 01:22:01
복원
<p>Call이 어디서 발생하느냐에 따라</p><p>1. User Call</p><p>2. Recursive Call</p><p><br /></p><p>그림1</p><p><br /></p><p>그림2</p><p><br /></p><p>1. User Call</p><p>&nbsp; 가. OCI(Oracle Call Interface)를 통해 Oracle 외부로부터 들어오는 Call을 말합니다.</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 그림2에서 보면 DBMS 입장에서의 사용자는 WAS이기 때문에 User Call이 클라이언트가 아닌 WAS에서 발생하게 됩니다.</p><p>&nbsp; 나. Peak 시간대에 시스템 장애 주범은 User Call인 경우가 많습니다.</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 애플리케이션의 설계와 프레임워크 기술 구조에 기인하는 경우가 많으며 Array Processing을 제대로 지원하지 않는 프레임 워크,</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 화면 페이지 처리에 대해 잘못 설계된 표준가이드, 사용자 정의 함수/프로시저에 대한 무조건적인 제약 등의 경우를 예로 들수 <br /></p><p>&nbsp;&nbsp;&nbsp;&nbsp; 있습니다.</p><p>&nbsp; 다. User Call을 최소화하기 위해서는</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (1) Loop쿼리를 해소하고 집합적 사고를 통해 One-SQL로 구현</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (2) Array Processing : Array 단위 Fetch, Bulk Insert/Update/Delete</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (3) 부분범위처리 원리 활용</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (4) 효과적인 화면 페이지 처리</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (5) 사용자 정의 함수/프로시저/트리거의 적절한 활용</p><p><br /></p><p>2. Recursive Call</p><p>&nbsp; 가. Oracle 내부에서 발생하는 Call을 말합니다.</p><p>&nbsp; 나. SQL파싱과 최적화 과정에서 발생하는 Data Dictionary 조회, PL/SQL로 작성된 사용자 정의 함수/프로시저/트리거</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 내에서의 SQL수행이 여기에 해당합니다.</p><p>&nbsp; 다. Recursive Call을 최소화하기 위해서는 바인드 변수를 적극적으로 사용해 하드파싱 발생회수를 줄여야 합니다.</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 그리고 PL/SQL의 시의 적절한 사용이 이루어져야 합니다.</p><p>&nbsp; 라. Recursive Depth의 경우 특정 프로시저를 호출했는데 거기서 또 다른 프로시저를 호출한 경우이며 그 정도가</p><p>&nbsp;&nbsp;&nbsp; 깊어지도록 프로그래밍하는 것은 바람직하지 않다. PL/SQL은 가상머신 상에서 수행되는 인터프리터언어이므로</p><p>&nbsp;&nbsp;&nbsp; 빈번한 호출 시 컨텍스트 스위칭 때문에 성능 저하현상이 발생합니다.</p><p><br /></p><p>그림3</p><p><br /></p><p>&nbsp; 마. 대용량 데이터 조회 쿼리에서 함수를 잘못 사용하면 성능이 극도로 저하되는 경우가 발생하는데 <br /></p><p>&nbsp;&nbsp;&nbsp; 함수를 부분범위처리하 가능한 상황에서 제한적으로 사용해야 하며, 될 수 있으면 조인 또는 스클라 서브쿼리 형태로</p><p>&nbsp;&nbsp;&nbsp; 변환하려는 노력이 필요합니다.</p><p><br /></p><p>그림4<br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p>
정찬호 2012.05.07 01:14:27
복원
<p>Call이 어디서 발생하느냐에 따라</p><p>1. User Call</p><p>2. Recursive Call</p><p><br /></p><p>[그림1]</p><p><br /></p><p><br /></p>
정찬호 2012.05.07 01:01:49