커서 Cursor
DB CAFE
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
- A cursor is a name or handle to a specific private SQL area.
- As shown in Figure 14-5, you can think of a cursor as a pointer on the client side and as a state on the server side.
- Because cursors are closely associated with private SQL areas, the terms are sometimes used interchangeably.
- 커서는 특정 개인(private) SQL 영역에 대한 이름 또는 핸들입니다.
- 핸들은 프로그램이 리소스에 액세스 할수 있도록 만들어 주는 메모리 구조
- 핸들은 클라이언트 메모리에 위치 하고 서버 프로세스에 할당된 메모리구조(SGA 내부의 라이브러리 캐시)를 참조
- 그림에서 볼 수 있듯이 커서는 클라이언트 측의 포인터와 서버 측의 상태로 생각할 수 있습니다.
- 커서는 서버측 개인용(private) SQL 영역과 밀접하게 연관되어 있기 때문에 이 용어는 때때로 같은 의미로 사용됩니다.
- 서버측 개인용 SQL영역에는 바인드 변수값과 쿼리 수행 상태 정보가 저장
- 서버측 개인용 SQL영역을 저장하는데 사용하는 세션 메모리를 UGA(User Global Area)라고 한다.
라이브러리 캐시에 저장된 커서 조회[편집]
- V$SQLAREA
- V$SQL
- 부모커서 = sql_id
- 자식커서 = child_number
assignment 하드파싱을 피해야하는 이유 = 오라클이 공유가능한 커서(shared pool) 를 라이브러리 캐시에 저장하는 이유
- 실행 계획 생성작업은 CPU 부하가 많이 발생되는 작업
- 라이브러리 캐시에 저장되는 부모/자식 커서를 위해 shared pool 메모리가 소모됨
- shared pool은 모든 세션이 공유하기 때문에 메모리 할당시 반드시 래치(11g 부터는 뮤텍스)가 발생되는 직렬화 과정을 거쳐야함.