오라클자바커뮤니티강좌입니다. Oracle의 메모리 구조 - SGA메모리 관리
구로디지털단지역
오엔제이프로그래밍 실무학원
(Java , Oracle, SQL, Oracle Tuning,
BackUP& Recovery, ASP.NET, C#, C#Network ,채용확정
무상교육)
www.onjprogramming.co.kr 오라클자바커뮤니티
오라클 데이터베이스 시스템은 시스템으로부터 할당 받은 메모리 영역을 관리하게 되는데 이때 사용되는
알고리즘을 LRU(Least Recently Used) 알고리즘이라 합니다. 이것은 가장 최근에 사용 안된 것을 우선적으로 메모리에서 제거
한다는 개념이죠… 이 알고리즘은 자주 사용되는 것을 메모리에 상주 시켜 한정된 SAG영역을 효율적으로 관리하는 알고리즘 입니다.
[LRU Algorithm]
MRU(Most Recently Used) End : 가장 최근에 엑세스한 버퍼 영역으로 데이터 검색 시 주로 사용
LRU(Least Recently Used) End : 가장 오래전에 엑세스 했던 버퍼 영역으로 주로 Free Buffer를 검색 할 때 이용
Free Buffer : 빈 버퍼
Pinned Buffer : 현재 엑세스 되고 있는 데이터가 있는 버퍼
Dirty Buffer : 변경된 데이터를 저장하고 있는 버퍼, Write List로 옮겨 집니다.
Aging : 하나의 시스템 내에서 모든 프로세스는 공정하게 자원을 할당 받아 사용 할 수 있어야 합니다. 한정된 시스템 자원을 동일한 시간에 작업을 요청한 프로세스들은 요청한 시간별로 우선순위를 두어 그 자원의 사용권을 할당 해야 합니다.이러한 시스템 내부의 알고리즘을 Aging이라 합니다.
위와 같은 LRU 리스트는 Pinned Buffer, Free Buffer와 Write List로 이동하지 않은 Dirty Buffer로 구성되어 있습니다. 사용자 프로세스의 요청으로 오라클 서버 프로세스는 데이터베이스 버퍼 캐시를 읽게 되는데 여기서 읽은 데이터베이스 버퍼를 MRU End에 위치 시키고 다른 버퍼들은 Aging되어 LRU End 쪽으로 옮겨 집니다. 결국 자주 사용하는 데이터는 메모리에 그렇지 않은 데이터는 Aging되어 데이터 파일에 저장하는 알고리즘을 사용하여 한정된 시스템 메모리를 효율적으로 사용하게 됩니다.
만약 Cache에서 MISS가 발생시 오라클 서버 프로세스는 LRU 리스트에서 Free Buffer를 찾기 위해 아래와 같은 과정을 거칩니다.
1.MRU END에서 LRU END로 탐색
2.Dirty Buffer를 발견하면 DIRTY LIST로 이동
3.Free Buffer를 반견하면 멈춤
4.일정 수 만큼 찾다가 못찾으면 DBWR을 시켜 DIRTY LIST를 비운 후 Free Buffer를 만듬
DBA는 데이블을 생성/변경시 Cache 옵션을 이용하여 임의로 테이블 내의 데이터를 MRU End에 위치 시킬 수 있으며 이에 따라 사용자의 요구가 있을 때 서버 프로세스는 MRU End에서 바로 반환 할 수가 있어 응답시간을 효울적으로 향상 시킬 수 있습니다. 대용량의 테이블이나 자주 사용 되지 않는 테이블을 이렇게 하면 안되겠죠^^;
[LRU Algorithm]
MRU(Most Recently Used) End : 가장 최근에 엑세스한 버퍼 영역으로 데이터 검색 시 주로 사용
LRU(Least Recently Used) End : 가장 오래전에 엑세스 했던 버퍼 영역으로 주로 Free Buffer를 검색 할 때 이용
Free Buffer : 빈 버퍼
Pinned Buffer : 현재 엑세스 되고 있는 데이터가 있는 버퍼
Dirty Buffer : 변경된 데이터를 저장하고 있는 버퍼, Write List로 옮겨 집니다.
Aging : 하나의 시스템 내에서 모든 프로세스는 공정하게 자원을 할당 받아 사용 할 수 있어야 합니다. 한정된 시스템 자원을 동일한 시간에 작업을 요청한 프로세스들은 요청한 시간별로 우선순위를 두어 그 자원의 사용권을 할당 해야 합니다.이러한 시스템 내부의 알고리즘을 Aging이라 합니다.
위와 같은 LRU 리스트는 Pinned Buffer, Free Buffer와 Write List로 이동하지 않은 Dirty Buffer로 구성되어 있습니다. 사용자 프로세스의 요청으로 오라클 서버 프로세스는 데이터베이스 버퍼 캐시를 읽게 되는데 여기서 읽은 데이터베이스 버퍼를 MRU End에 위치 시키고 다른 버퍼들은 Aging되어 LRU End 쪽으로 옮겨 집니다. 결국 자주 사용하는 데이터는 메모리에 그렇지 않은 데이터는 Aging되어 데이터 파일에 저장하는 알고리즘을 사용하여 한정된 시스템 메모리를 효율적으로 사용하게 됩니다.
만약 Cache에서 MISS가 발생시 오라클 서버 프로세스는 LRU 리스트에서 Free Buffer를 찾기 위해 아래와 같은 과정을 거칩니다.
1.MRU END에서 LRU END로 탐색
2.Dirty Buffer를 발견하면 DIRTY LIST로 이동
3.Free Buffer를 반견하면 멈춤
4.일정 수 만큼 찾다가 못찾으면 DBWR을 시켜 DIRTY LIST를 비운 후 Free Buffer를 만듬
DBA는 데이블을 생성/변경시 Cache 옵션을 이용하여 임의로 테이블 내의 데이터를 MRU End에 위치 시킬 수 있으며 이에 따라 사용자의 요구가 있을 때 서버 프로세스는 MRU End에서 바로 반환 할 수가 있어 응답시간을 효울적으로 향상 시킬 수 있습니다. 대용량의 테이블이나 자주 사용 되지 않는 테이블을 이렇게 하면 안되겠죠^^;
댓글 없음:
댓글 쓰기