투씨에스지 기술 블로그

Shared Pool Fragmentation 본문

Oracle/Admin

Shared Pool Fragmentation

TOCSG 2014.11.17 17:14

1. Shared Pool Fragmentation 오라클 공식 문서

 

 

Shared Pool Fragmentation 공식문서(문서 ID 1532616.1)

 

 

<Shared Pool Fragmentation 과 ORA-4031의 관계>

 

SGAmemory pool에는 memory chunk들이 다양한 크기로 있게 됩니다. 데이터베이스 인스턴스가 실행되면, pool 내에서는 하나의 커다란 memory chunk를 할당한 후, free list에 두게 됩니다. 시간이 흐르면서 (그리고 여러 작업이 처리되면서) memory는 요청에 따라 필요한 작업에서 쓰도록 주어졌다가 (요청된 크기에 맞게 작은 chunk로 분할되어) 다시 되돌려지는 작업이 반복되고, 이렇게 사용 후 되돌려지는 memory들은 그 크기에 따라 해당 pool내 서로 다른 free list bucket에 놓이게 됩니다.

ORA-4031 에러는 SGA내 어떤 memory pool 내에서 필요한 크기의 메모리를 찾을 수 없을 때 일어납니다. 사용자의 작업에 따라 (SQL 실행 등) 작업에 필요한 메모리를 가져와 사용하게 되고 이러한 메모리는 오라클 데이터베이스 내부에서 필요한 크기의 memory chunk를 찾아 사용하게 되는데 필요한 크기의 memory chunk가 없으면 ORA-4031 에러로 처리되게 됩니다.

shared pool은 다른 memory pool들과는 다르게 관리가 됩니다. shared pool은 데이터베이스 딕셔너리와 라이브러리 캐쉬와 관련된 정보를 담게 됩니다. 그런데, 이러한 메모리 영역들은 free listLeast Recently Used (LRU) 알고리즘으로 관리됩니다. ORA-4031 에러는 모든 free list들에서 사용가능한 메모리를 검색하고, LRU 리스트에 있는 object들 중에 최근에 가장 사용되지 않은 것을 비워 메모리를 확보하는 작업을 여러번 반복한 후에 일어나게 됩니다. 이는 ORA-4031 에러는 미리 예상하기가 매우 어렵다는 것을 뜻합니다.

  

공식 문서 요약

    -  SGA 내에는 다양한 크기의 SQL 저장공간이 존재 

    -  시간이 지나면서 memory 요청에 따라 필요한 작업에 쓰도록 주어졌다가 다시 되돌리는  

      작업 반복 메모리의 조각화 발생

    -  ORA-4031 에러는 SGA 내 필요한 크기의 메모리를 찾을수 없을때 발생

 

 

ORA-4031 발생 국내 사례

 

<국내사례>

OOOOO은 특정 애플리케이션과 오라클 Alert log에서 ORA-4031이 발생하는 문제가 생긴 적도 있다. ORA-4031이란 쉐어드 풀(shared pool)이라는 오라클 SGA 영역의 조각화로, 애플리케이션이 요구하는 일정 크기의 연속된 메모리 영역을 확보할 수 없을 때 발생되며 통상적으론 애플리케이션이 Static SQL이 아닌 Literal SQL을 사용하는 데서 오는 영향이 크다. OOOOO의 경우도 데이터 입력시 Literal SQL을 주로 사용함에 따라 DB(SGA)의 메모리 부족현상이 발생, 장애로 이어진 것이다
--> 이 경우 ORA-4031 발생시 프로그램 모듈 분석 후 Literal SQL에 대한 개선 SQL 선정
   

 

'Oracle > Admin' 카테고리의 다른 글

Oracle 유저 패스워드 만료시기 설정  (0) 2016.06.29
Row Chaining & Row Migration  (0) 2015.02.10
Shared Pool Fragmentation  (0) 2014.11.17
Oracle 필수 파일  (0) 2014.10.27
Oracle Database Architechture  (0) 2014.07.28
Listener 관리 방안  (0) 2014.06.11
0 Comments
댓글쓰기 폼