Oracle Database 튜닝


SQL 옵티마이저 

사용자가 원하는 작업을 가장 효율적으로 수행할 수 있는 최적의 데이터 엑세스 경로를 선택해주는 DBMS 엔진이다. 최적화 단계는 다음과 같다. 

  1. 후보 실행 계획을 뽑는다.
  2. 오브젝트및 통계를 이용해 최저 비용을 나타내는 실행 계획을 선택한다. 
  3. 최저 비용을 나타내는 실행계획을 선택한다. 

SGA 구성

System Global Area

  1. 라이브러리 캐시 – SQL 파싱, 최적화, 로우 소스 생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용 할 수 있도록 캐싱해 두는 메모리 공간, 라이브러리 캐시 에서 SQL 을 찾아 실행 단계로 넘어가는 것을 Soft Parsing 이라고 하고 찾는데 실패해 최적화 로우 소스 생성 단계를 모두 거치는 것을 Hard Parsing 이라고 한다. Hard Parsing 후 SQL은 라이브러리 캐시에 저장된다. 
    • SQL 문은 이름이 없다 그럼으로 모든 쿼리가 라이브러리 캐시에 저장되는데 이때 바인드 변수를 쓰면 비슷한 쿼리를 한번만 저장하고 사용할 수 있다. 

데이터 베이스 저장 구조

  1. 테이블 스페이스 – 세그먼트를 담는 콘테이너로 여러 개의 데이터파일로 구성된다. 
  2. 세그먼트 – 테이블, 인덱스, LOB 등과 같이 저장 공간이 필요한 오브젝트 이다. 
  3. 익스텐트 – 공간을 확장하는 단위이며 테이블이나 인덱스에 데이터를 삽입하다가 공간이 부족해지면, 테이블 스페이스로 부터 익스텐트를 추가로 할당 받는다. 그리고 익스텐트는 연속된 블록들의 집합이다. 
  4. 블록 – 사용자가 입력한 레코드가 실제로 저장되는 장소

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 등 

 



블로그 구독하기 !!

You may also like...