Oracle DB구조2 : Instance의 SGA 메모리구조
오라클 데이터베이스 구조
- 오라클DB는 크게 인스턴스(SGA 메모리구조와 백그라운드 프로세스와 데이터베이스로 나뉜다.
SGA (System Grobal Area) 메모리구조
- 필수 메모리 구조는 3개가 있다.
- Shared pool, DB buffer cache, Redo log buffer
- 공유가 가능한 메모리 구조.
- 실행순서 :
Library cache
>Data dictionary cache
>DB buffer cache
Shared pool
사전 준비작업을 하는 메모리 구조
프로세스 예시
- 유저가 접속한다. > select 구문을 날린다.
- user proc가 구문을 받는다 : 유저의 요청을 이진정보로 변경 > 해시함수를 통해 반환된 해시value값을 server proc로 전달한다.
- 대소문자와 공백등 완전히 똑같은 구문이라면 해시value가 동일하다.
- server proc가 진행 : 고유한 해시값을 가지고 Library cache로 간다
- 해시값을 대조해서 동일한 값이 있으면 hit하고 실행계획을 재사용(응답속도 향상)
- 동일한 해시값이 없으면 miss가 되고 Library cache에 새로 생성.
- 그 다음 Data dictionary cache로 간다.
Library cache
- 최근에 실행된 sql구문과 실행계획이 저장되는 공간
- LRU(Least Recently Used Algorithm) 알고리즘으로 관리됨.
- 주로 사용되는 FIFO 정책이 아닌 LRU 알고리즘 방식으로 최근에 사용된 적이 없는 것부터 덮어쓴다.
- 알고리즘과 자료구조는 복잡하지만 개별적으로 공부하면 좋다.
- 대소문자, 공백까지 일치가 되어야 hit됨.
- hit가 많을 수록 응답속도가 향상되어 DB성능이 좋아진다.
- 개발자입장에서 어떻게 hit를 높일 수 있을까?
- 대소문자를 어떻게 쓸지 정확히 정하고 따른다.
- 같은 DB를 사용하는 사람들끼리 대소문자, 공백등 규칙을 정하고 따른다.
- DBA입장에서 어떻게 hit를 높일까?
- Library cache 메모리 사이즈를 최대한 크게 잡을 수록 HIT율은 올라간다.
- 개발자입장에서 어떻게 hit를 높일 수 있을까?
Data dictionary cache
- 최근에 사용된 DB 정의정보가 저장된 공간
- 정의정보란 file, object, 권한, 제약조건 등
- 위치 : Datafiles의 1번 데이터파일
- LRU(Least Recently Used Algorithm) 알고리즘으로 관리됨
- Data dictionary cache의 hit율을 높일 수 있는 방법
- 개발자입장 : 불필요한 쿼리구문 실행하지말 것.
- DBA입장 : cache 메모리 사이즈를 최대한 크게 잡기.
DB buffer cache
- 실제 실행 작업을 하는 메모리 구조
- 최근에 사용된 Data block이 저장된 공간
- LRU 알고리즘으로 관리됨
- 데이터 블록 크기의 권장사항은 8k(권장사항)
- 소규모의 데이터를 자주 캐치하는 회사라면 데이터 크기가 작은 것이 처리가 빠르다 : 2k, 4k
- 대규모의 데이터를 자주 캐치하는 회사라면 데이터 크기가 큰 것이 처리가 빠르다 : 16k, 32k
Redo log buffer
- DB에서 발생된 변경작업의 로그정보(Redo data)가 기록된 공간
- 순환형으로 관리됨