Cursor Life Cycle

모든 SQL(Select,Update, Delete)은 Cursor를 생성하여 실행됩니다. Pro*C 와 같은 툴을 사용하면 Cursor 의 각 단계를 프로그램에서
제어할 수 있고, 그렇지 않고 SQL*Plus 와 같은 툴을 사용할 경우에는 Implicit Cursor 가 내부적으로 생성되어, 결과만 보여지게 됩니다.

 

– Create Cursor

– Parse the statement

– Describe Query Result

– Define Query Output

– Bind Variables

– Parallelise the statement

– execute the statement

– Fetch rows of a query

– Close the cursor

 

SQL 처리의 3단계

– Parse -> Execute -> Fetch

 

Parse

– Syntax Check

– Object Resolution & Privilege Check (Dictionary 참조, Recursive SQL)

– Shared Pool(Shared SQL Area)에서 동일한 SQL 문장이 있는지 검색

– Determine Optimal Execution Plan (by Optimizer)

– Parsed Tree 생성하고 Shared SQL Area 에 저장

 

< Shared SQL Area 에 저장되는 내용 >

  _ SQL Text

  _ Explain Plan

  _ Parsed Tree

 

Execute

생성된 Parsed Tree 를 적용하여 실제 DATA 에 대한 I/O를 수행

 

Fetch

– SELECT 문일 경우에 행을 가져오는 과정

일반적으로 Array Fetch 가 사용됨 (사용방법은 Client Tool에 따라 다름)

  SQL*Plus 의 경우 Array Size(Default 15) 는 다음과 같이 확인하고 변경할 수 있다.

 

SQL> show arraysize arraysize 15

SQL> set arraysize 20

SQL> show arraysize arraysize 20

 

Cursor(SQL) 공유

동일한 SQL 일 경우 Shared SQL 에 있는 Explain Plan / Parsed Tree 을 가지고 실행하게 되어 Parse Time 이 필요없게 되고, 메모리(Shared SQL)를 절약할 수 있음

동일한 SQL 이란?

  _ SQL Text 가 동일해야 함(대소문자 구별, Space/Tab 문자, 주석 까지 같아야 함)

  _ 실제 참조되는 Object 가 동일해야 함

  _ Bind Variable’s Data Type 이 동일해야 함

– Parse 의 첫단계에서 동일한 SQL 문이 Shared SQL Area 에 존재하는지 Check 하는 과정

 

 

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다