Oracle Database 튜닝
SQL 옵티마이저
사용자가 원하는 작업을 가장 효율적으로 수행할 수 있는 최적의 데이터 엑세스 경로를 선택해주는 DBMS 엔진이다. 최적화 단계는 다음과 같다.
- 후보 실행 계획을 뽑는다.
- 오브젝트및 통계를 이용해 최저 비용을 나타내는 실행 계획을 선택한다.
- 최저 비용을 나타내는 실행계획을 선택한다.
SGA 구성
System Global Area
- 라이브러리 캐시 – SQL 파싱, 최적화, 로우 소스 생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용 할 수 있도록 캐싱해 두는 메모리 공간, 라이브러리 캐시 에서 SQL 을 찾아 실행 단계로 넘어가는 것을 Soft Parsing 이라고 하고 찾는데 실패해 최적화 로우 소스 생성 단계를 모두 거치는 것을 Hard Parsing 이라고 한다. Hard Parsing 후 SQL은 라이브러리 캐시에 저장된다.
- SQL 문은 이름이 없다 그럼으로 모든 쿼리가 라이브러리 캐시에 저장되는데 이때 바인드 변수를 쓰면 비슷한 쿼리를 한번만 저장하고 사용할 수 있다.
데이터 베이스 저장 구조
- 테이블 스페이스 – 세그먼트를 담는 콘테이너로 여러 개의 데이터파일로 구성된다.
- 세그먼트 – 테이블, 인덱스, LOB 등과 같이 저장 공간이 필요한 오브젝트 이다.
- 익스텐트 – 공간을 확장하는 단위이며 테이블이나 인덱스에 데이터를 삽입하다가 공간이 부족해지면, 테이블 스페이스로 부터 익스텐트를 추가로 할당 받는다. 그리고 익스텐트는 연속된 블록들의 집합이다.
- 블록 – 사용자가 입력한 레코드가 실제로 저장되는 장소
Single Block I/O, Multi Block I/O
I/O 를 할 때(데이터를 가져올때) 캐시 에서 데이터를 먼저 읽는 논리적 I/O를 하는데 캐시에 데이터가 없으면 Disk에서 읽어 오는 물리적 I/O를 한다.
- Single Block I/O – i/O Call 시 한번에 한개 블락씩 요청한다.적은데이터를가져와야할때유리하다.
- 사용처
- 인덱스 루트 블록 Read
- 루트 블록 주소를 이용해 인덱스 브랜치 블록 Read
- 브렌치 블록 주소를 이용해 인덱스 리프 블록 읽을때
- 리프 블록 주소를 이용해 테이블 블록 읽을때
- 사용처
- Multi Block I/O – i/O Call 시 한번에 여러 블록씩 요청한다. 익스텐트를 넘어갈 수 없으며 오라클 레벨 I/O 단위 (블럭) 8KB 이고 db_file_multiblock_read_count 를 통해 블럭 갯수를 할당 할 수 있다. 128 개로 하면 OS 레벨 IO인 1MB 와 맞음으로 최대로 I/O를 할 수 있다.
- 사용처
- 테이블 Full Scan 등
- 사용처
블로그 구독하기 !!