13
오오오 오오 (Cursor) 오오 & 오오오 오오 (Memory Structure) CURSOR, PGA, UGA Shared Server, Dedicate Server, DRCP Library Cache, Shared SQL Area 오오오오오 (http://www.topcredu.co.kr ), 오오오

오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

  • Upload
    3-2

  • View
    853

  • Download
    6

Embed Size (px)

Citation preview

Page 1: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

오라클 커서 (Cursor) 개념 & 메모리 구조 (Memory Struc-ture)

CURSOR, PGA, UGAShared Server, Dedicate Server,

DRCPLibrary Cache, Shared SQL Area

탑크리에듀 (http://www.topcredu.co.kr), 이종철

Page 2: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

커서 (Cursor) 란 ?• 커서는 SELECT 또는 DML(Insert/Update/Delete/Merge) 조작시 클라이언트

프로세스에서 참조하는 PGA 또는 SGA 의 Library Cache 내 전용 SQL 영역(Private SQL Area, Context Area) 을 가리키는 포인터 또는 핸들 이다 . • Private SQL Area, Context Area 에는 SQL 문 처리를 위한 모든 정보 ( 처리된 로우

카운드 등 ) 들을 담고 있고 또한 커서는 SQL 명령으로 리턴되는 하나 또는 그이상의 ROW 를 포함하고 있으며 이를 Active Set 이라 하고 Active Set 의 처음 로우를 기본적으로 가리키고 있다 .• DML 에서 커서 관리는 오라클 서버에서 알아서 하지만 오라클 PL/SQL 에서는 SE-

LECT 명령에 대해 커서를 조작하는 몇가지 방법을 제공한다 .• SQL 커서는 오라클 서버 운영모드가 Dedicate Server 환경이면 PGA,

MTS(MultiThreaded Server) 환경이면 SGA 의 Library Cache 에 위치한다 .• 묵시적 커서는 오라클 서버의 모든 SQL 에 대해 자동으로 만들어지는 커서를 말한다 .• 명시적 커서는 PL/SQL 을 작성하는 개발자가 명시적으로 Declare 절에 선언하여

사용하는 커서이며 다중행을 다룰 때 사용한다 .

Page 3: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

커서 (Cursor)란 ?

Page 4: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

• 오라클의 Shared Pool 은 SQL 문을 처리하고 커서를 공유하는데 사용되는 메모리 공간이며 SGA 내부에 생성된다 . 파싱된 SQL 명령어 , SQL 의 실행계획 , 파싱되고 컴파일된 PL/SQL 프로그램들이 저장되는 각 사용자 세션에서 공유하는 공간이다 .

Shared SQL Area

Page 5: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

• 데이터베이스 버퍼 캐시는 모든 사용자들이 공유하며 , SGA 안에 위치하여 Datafile 로 부터 읽은 블록의 복사본을 저장하는 곳이다 . • 두개의 리스트로 구성되는데

Write List 와 Least Recently Used(LRU) List 이다 . Write List는 수정되었지만 아직 디스크의 DataFile 에 반영되지 않은 dirty buffers 로 구성되며 LRU List 는 사용가능한 free buffers, 현재 접근되고 있는 pinned buffers, 아직 Write List 로 이동되지 않은 dirty buffers 로 구성되어 있다 .

DataBase Buffer Cache 와 Server Process

Page 6: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

• 사용자가 SQL 구문을 실행할 때 오라클 서버 프로세스에서 가장 먼저하는 일이 문법체크(Syntax Check) 이며 그 다음 동일한 SQL 구문이 이미 실행되었는지 해시값으로 Shared SQL Area 에서 검사하는 일이다 . • 동일한 SQL 구분이 있다면 이미

만들어진 파싱트리 , 실행계힉등을 공유한다 .

Shared Pool Check

Page 7: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

Oracle Memory Strucure

Page 8: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

• Dedicate Server 방식

• 서버 프로세스는 클라이언트의 요청을 받아 SQL 문들을 처리하는 프로세스인데 , 하나의 서버 프로세스가 하나의 클라이언트 프로세스에 대응되는 구조를 가지는 형태를 Dedicate Server 방식이라 한다 .

• Shared Server 방식

• 오라클 리너스를 사용하는 방식이며 N 개의 서버 프로세스에 모든 클라이언트의 요청 처리를 할당하는 구조이다 . 사용자 프로세스의 요청을 디스패처가 받고 이를 요청큐(Request Queue) 에 넣어두면 오라클의 Shared Server Process 가 받아서 처리하는 구조다 .

• DRCP 방식

• 오라클 서버프로세스를 풀링하는 개념으로 각각의 Dedicate Server 가 풀링된다 .(오라클 11g 이후 가능한 방식 )

Dedicate/Shared Server, DRCP 방식

Page 9: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

PGA(Program Global Area) - 1• PGA(Program Global Area) 는 오라클 서버 프로세스가 시작될 때 생성되며 다른

세션과 공유되지 않는 영역으로 데이터베이스에 접속하는 사용자에 대응되는 오라클서버 프로세스가 사용하는 메모리 영역이다 . 메모리 힙으로 세션에서 사용되는 변수 , 데이터 , SQL 등에서 정렬을 위한 작업공간으로 사용되며 이공간이 부족하여 디스크에서 소트가 일어나면 SQL 문은 느려지게 된다 . 서버 프로세스에 할당되는 것이고 SGA 에 생성되는 영역은 아니다 .

• PGA 의 Private SQL Area 는 파싱된 SQL 문의 정보 또는 SQL 처리를 위한 세션 정보 ( 데이터 , 변수 ) 등을 가지는데 , Server Process 가 SQL, PL/SQL 코드를 실행할 때 바인드 변수 , 쿼리 실행 상태에 관한 정보 등을 저장하거나 쿼리 실행의 작업 영역 (Work Area) 으로 사용된다 .

• Shared Server 환경에서 UGA(User Global Area) 안의 Shared SQL Area(실행계획이 저장되는 SGA 내부의 요소 ) 와는 구별된다 . Shared Server 환경에서 UGA 는 SGA 내부에 생성되며 Dedicate Server 환경에서는 PGA 에 생성된다 .

Page 10: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

PGA(Program Global Area) - 2• 같거나 다른 여러 세션의 Private SQL Area 가 SGA 내부의 하나의 실행

계획 (Execution Plan) 을 참조할 수 있다 . 예를 들어 10 개의 “ SELECT * FROM EMP” 쿼리를 하나의 세션에서 5 번 , 서로 다른 5 개의 세션에서 한 번씩 번 실행한 다고 했을 때 이 모든 세션의 Private SQL Area 에서 동일한 SGA 내부 Library Cache 안의 Shared SQL Area 의 실행계획을 참조하고 각 세션의 Private SQL Area 의 변수 및 데이터는 서로 공유되지 않는다 . • PGA 의 Private SQL Area 는 RUN-TIME AREA, PERSISTENT AREA 로

나눌 수 있다 .• RUN_TIME AREA : 쿼리 실행의 상태정보를 보관하는 곳이며 FULL TA-

BLE 스캔을 하는 경우 각 레코드를 검색하는 트랙과 같은 역할을 하고 쿼리가 실행될 때 할당되고 종료되면 해제 된다 .• PERSISTENT AREA : 바인드 변수를 포함하는 영역인데 바인드 변수

값은 쿼리가 실제 실행될 때 제공된다 . 커서가 닫힐 때 반환되는 영역이다 .

Page 11: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

PGA(Program Global Area) - 3• 사용자 프로세스가 오라클 서버 프로세스를 호출하면 서버프로세스가 PGA 를 할당하고 SQL

Wrok Area 를 생성하여 이러한 공간을 통해 쿼리의 정렬등의 작업이 이루어지고 SGA 와

데이터를 주고 받으면서 작업을 한다 . PGA 는 UGA 와 Stack Space 로 구성되는데 아래와

같은 요소가 있다 . (Dedicate Server 에서는 User Session Data, Cursor State, Sort Area를 PGA 에 저장하며 Shared Server 에서는 User Session Data 를 SGA 에 저장한다 .) 

• USER SESSION DATA : SELECT 한 값을 클라이언트로 전달하기 위한 사용자 프로세스의

정보를 저장하고 그 주소를 저장한다 .

• CURSOR STATE : 실행하는 SQL 문의 파싱정보가 저장된 곳의 주소를 저장

• SORT AREA : 정렬을 위한 공간 .

• STACK SPACE : SQL 문장에 사용되는 바인드 변수 저장 .

Page 12: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

UGA(User Global Area)• 사용자 세션과 연계된 메모리 영역으로 세션변수를 위해 할당된 메모리 영역이다 .• 세션변수 영역과 OLAP 의 데이터 페이지를 저장하기 위한 OLAP POOL 을 가진다 .• Shared Server 환경에서 UGA 는 SGA 내부 LARGE POOL(LARGE POOL 이

없다면 SHARED POOL) 에 생성되며 Dedicate Server 환경에서는 UGA 는 PGA에 생성된다 .• Shared Server 환경에서는 각 사용자 세션에서 동일한 SQL 문을 실행한다면 SQL

의 복사본이 SGA 내의 UGA 에 저장되며 Dedicate Server 환경에서는 개별 PGA에 저장된다 .

Page 13: 오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Shared SQL Area, Cursor

This practice makes Expert!

PL/SQL단기속성 (1일완성 )SQL힌트 /튜닝 (단기 2일교육 )SQL기초과정