메뉴 건너뛰기

bysql.net

2._User_Call_vs._Recursive_Call

2012.05.07 10:01

정찬호 조회 수:4427

Call이 어디서 발생하느냐에 따라

1. User Call

2. Recursive Call


그림1

꾸미기_꾸미기_P20120507_011455512_1F757B8A-7E10-4F4C-A7B4-05B9F9075A62.JPG



그림2

꾸미기_꾸미기_P20120507_011511768_FD8A5986-A923-4AE3-BD3B-A2BDC7D158E6.JPG


1. User Call

  가. OCI(Oracle Call Interface)를 통해 Oracle 외부로부터 들어오는 Call을 말합니다.

     그림2에서 보면 DBMS 입장에서의 사용자는 WAS이기 때문에 User Call이 클라이언트가 아닌 WAS에서 발생하게 됩니다.

  나. Peak 시간대에 시스템 장애 주범은 User Call인 경우가 많습니다.

     애플리케이션의 설계와 프레임워크 기술 구조에 기인하는 경우가 많으며 Array Processing을 제대로 지원하지 않는 프레임 워크,

     화면 페이지 처리에 대해 잘못 설계된 표준가이드, 사용자 정의 함수/프로시저에 대한 무조건적인 제약 등의 경우를 예로 들수

     있습니다.

  다. User Call을 최소화하기 위해서는

     (1) Loop쿼리를 해소하고 집합적 사고를 통해 One-SQL로 구현

     (2) Array Processing : Array 단위 Fetch, Bulk Insert/Update/Delete

     (3) 부분범위처리 원리 활용

     (4) 효과적인 화면 페이지 처리

     (5) 사용자 정의 함수/프로시저/트리거의 적절한 활용


2. Recursive Call

  가. Oracle 내부에서 발생하는 Call을 말합니다.

  나. SQL파싱과 최적화 과정에서 발생하는 Data Dictionary 조회, PL/SQL로 작성된 사용자 정의 함수/프로시저/트리거

     내에서의 SQL수행이 여기에 해당합니다.

  다. Recursive Call을 최소화하기 위해서는 바인드 변수를 적극적으로 사용해 하드파싱 발생회수를 줄여야 합니다.

     그리고 PL/SQL의 시의 적절한 사용이 이루어져야 합니다.

  라. Recursive Depth의 경우 특정 프로시저를 호출했는데 거기서 또 다른 프로시저를 호출한 경우이며 그 정도가

    깊어지도록 프로그래밍하는 것은 바람직하지 않다. PL/SQL은 가상머신 상에서 수행되는 인터프리터언어이므로

    빈번한 호출 시 컨텍스트 스위칭 때문에 성능 저하현상이 발생합니다.


그림3

꾸미기_꾸미기_P20120507_011525377_A27313FC-B9AB-4176-97A1-576B6B4A1929.JPG 


  마. 대용량 데이터 조회 쿼리에서 함수를 잘못 사용하면 성능이 극도로 저하되는 경우가 발생하는데

    함수를 부분범위처리하 가능한 상황에서 제한적으로 사용해야 하며, 될 수 있으면 조인 또는 스클라 서브쿼리 형태로

    변환하려는 노력이 필요합니다.


그림4

꾸미기_꾸미기_P20120507_011546946_425B7146-D005-41EE-8865-4028D60D4E74.JPG




번호 제목 글쓴이 날짜 조회 수
66 Front Page file 운영자 2012.02.21 131201
65 6._문장수준_읽기_일관성 file 정찬호 2012.03.12 57274
64 3._SQL트레이스 sapius 2012.04.04 26849
63 5._Undo dasini 2012.03.11 25073
62 2._SQL_처리과정 dasini 2012.04.06 21667
61 6._RAC_캐시_퓨전 file 남송휘 2012.05.21 17525
60 4._커서_공유 file 남송휘 2012.04.27 16093
59 5._오라클_Lock file 시와처 2012.03.26 12577
58 8._블록_클린아웃 시와처 2012.03.19 12005
57 4._동시성_구현_사례 [1] dasini 2012.03.27 11695
56 8._Statspack_AWR 시와처 2012.04.01 11483
55 2._DB_버퍼_캐시 file 시와처 2012.03.04 10429
54 10._대기_이벤트 박영창 2012.03.19 10372
53 9._Snapshot_too_old 박영창 2012.03.19 9734
52 1._기본_아키텍처 file AskZZang 2012.03.02 8346
51 7._세션_커서_캐싱 박영창 2012.04.22 7787
50 5._Direct_Path_IO 남송휘 2012.05.21 7534
49 3._버퍼_Lock 박영창 2012.02.24 7246
48 7._PLSQL_함수의_특징과_성능_부하 file 남송휘 2012.05.15 6640
47 10._V$SQL file 정찬호 2012.04.09 6544