조회 수 15775 추천 수 0 댓글 0

Windows 32bit OS 메모리 제약과 Oracle 에서 추가메모리 사용하도록 설정하는 방법을 설명한다.

CONTENTS



1. Windows 32bit 메모리 확장 관련 용어들
2. Windows 32bit 메모리 확장 설정 방법
3. AWE_WINDOW_MEMORY 파라미터 산정
4. Windows 에서 Oracle 메모리 사용량 모니터링
5. Windows 에서 Oracle 메모리 사용량 줄이는 방법

EXPLANATIONS



1. Windows 32bit 메모리 확장 관련 용어

- /3GB
Windows 32bit OS 에서 메모리 어드레싱은 4GB 까지 가능하고, 이 중 2GB 는 커널이 사용하고
나머지 2GB 가 사용자 프로세스에게 할당되는 최대 메모리 크기이다. Windows 2000 이상에서는
/3GB 옵션을 사용하여 커널에 1GB 만 할당하고 나머지 3GB 를 사용자 프로세스에게 할당하여
2GB 한계를 넘어 메모리를 확장하여 사용할 수 있다. OS 에서는 boot.ini에 /3GB 옵션 추가하고,
어플리케이션 실행파일 헤더에 IMAGE_FILE_LARGE_ADDRESS_AWARE bit 이 설정되어 있으면 된다.
Oracle 8.1.7 이상에서는 기본적으로 IMAGE_FILE_LARGE_ADDRESS_AWARE bit 설정되었으므로 3GB
사용가능하다. 참고로 Windows 64bit OS 는 한 프로세스당 어드레싱 가능한 메모리가 8TB 이므로
32bit 에서 사용하는 추가적인 옵션들이 필요없다.

- /PAE (Physical Address Extentions)
/3GB 옵션과 더불어 32bit 메모리 제약을 넘기위한 방법으로, 가상 메모리내에 포인터 테이블로
"별도 메모리 영역"을 매개함으로 프로세스가 사용할 수 있는 실제 메모리 크기를 확장한다.
예를들어 Oracle 은 가상 메모리 2GB 영역 (/3GB 사용하면 3GB) 내에 포인터 테이블(window)만
저장하고 실제 DB BUFFER CACHE 는 "별도 메모리 영역" 에 할당한 후, BUFFER CACHE 사용시
포인터 테이블을 매개하여 실제 BUFFER CACHE 영역 사용한다. 여기서 "별도 메모리 영역" 도
메모리를 사용하는 것이다.

- AWE (Address Windowing Extensions) & Oracle 구현방식
AWE 는 PAE 기능을 사용하도록 어플리케이션에 제공된 API 이다.
AWE API 를 사용한 오라클 버젼들은 아래와 같다.
* Oracle 8.1.6.x
* Oracle 8.1.7.x
* Oracle 9.2.x
* Oracle 10.1.x
* Oracle 10.2.x

주의! 9.1.0.x 는 AWE 지원안됨.

AWE 구현된 Oracle 버젼들은 3GB 이상의 SGA 사용할 수 있는데, 정확히 말하면 SGA 중 BUFFER CACHE
영역만 3GB 이상의 "별도 메모리 영역"에 지정할 수 있다. 오라클에서 AWE 를 사용하면 BUFFER CACHE
사용시 포인터 테이블과 실제 BUFFER CACHE 가 있는 별도 메모리 영역과의 mapping & unmapping
과정이 추가되므로 기본적인 처리보다 느릴 수 있지만, 적어도 IO 을 줄일 수 있기 때문에
IO 느린 시스템에서는 성능 향상을 기대할 수 있다.

2. Windows 32bit 메모리 확장 설정 방법

- boot.ini 에 /3GB /PAE option 을 추가
multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Advanced Server" /3GB /PAE

- 오라클 서비스 실행하는 OS USER 에 "Lock memory pages"의 권한 부여
. Start -> Programs -> Administrative Tools -> Local Security Policy
(on a Domain Controller, click on 'Domain Security Policy' instead of 'Local Security Policy')
. Double-click on the 'Lock Pages in memory' policy.
. Add the appropriate user and click 'Ok'.
. Restart the OracleService<SID>

- 포인터 테이블 (window) 크기 지정하는 AWE_WINDOW_MEMORY 를 레지스트리 추가
. HKEY_LOCAL_MACHINE => Software => Oracle => HomeX 에 AWE_WINDOW_MEMORY=1024000000 추가
주의! 여러 인스턴스라면 각 Home 에 추가

- init.ora 에 USE_INDIRECT_DATA_BUFFERS=TRUE 추가하고 DB_BLOCK_BUFFERS 로 BUFFER CACHE 크기 설정

주의! DB_CACHE_SIZE 로 BUFFER CACHE 지정하면 에러 발생한다.
ORA-00385: cannot enable Very Large Memory with new buffer cache parameters

- Oracle10g 에서는 SGA_TARGET=0 설정하여 Automatic Memory Management 를 disable 해야한다.

3. AWE_WINDOW_MEMORY 크기 계산 방법

(1) 기본값 : AWE_WINDOW_MEMORY = 1GB

/PAE /3GB 를 지정해도 아래 메모리들의 총합은 3GB 내에 들어와야한다.
- AWE_WINDOW_MEMORY
- BUFFER CACHE 제외한 SGA (shared_pool, large_pool, java_pool, log_buffers ...)
- Overhead for Oracle.exe DLLs (100MB 정도)
- Stack space per thread (1MB/thread)
- PGA and UGA

결국 BUFFER CACHE 최대 크기는 OS 메모리 - 4GB + AWE_WINDOW_MEMORY 로 산정된다.
(여기서 4GB는 Oracle이 사용하는 3GB와 OS에서 사용하는 1GB의 합. 결국 이 영역을 제외한 나머지 영역에 buffer cache를 지정하여 사용할 수 있다.)
예를들어 12GB RAM 시스템에서 최대 BUFFER CACHE 크기= (Total RAM - 4GB + AWE_WINDOW_MEMORY) = 12GB - 4GB + 1GB = 9GB 이다.

(2) 8.1.7 이하에서는 AWE_WINDOW_MEMORY 최소값 제한이 없었으나,
Oracle9i R2 부터 최소값보다 작게 설정하면 DB 기동시 에러들이 발생한다.

ORA-27102 out of memory
OSD-00034 Message 34 not found; Product=RDBMS;facility =SOSD
O/S Error: (OS 8) Not enough storage is available to process this command

AWE_WINDOW_MEMORY 최소값 계산 공식


a. MIN(AWE_WINDOW_MEMORY)= (4096 * DB_BLOCK_SIZE * _DB_BLOCK_LRU_LATCHES)/8
b. _DB_BLOCK_LRU_LATCHES = (Max buffer pools * SETS_PER_POOL)
c. Max Buffer Pools = 8 (상수)
d. SETS_PER_POOL /* USE_INDIRECT_DATA_BUFFERS=TRUE 로 VLM ENABLED */
SETS_PER_POOL = 2*CPU_COUNT (if VLM is enabled)
SETS_PER_POOL = CPU Count/2 (if VLM is NOT enabled)

시나리오 #1:


# of CPU's = 8
DB_BLOCK_SIZE = 8192
Total RAM = 8GB

SETS_PER_POOL = 2 * CPU_COUNT = 16
_DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*16 = 128
MIN(AWE_WINDOW_MEMORY) = (4096*DB_BLOCK_SIZE * _DB_BLOCK_LRU_LATCHES) / 8
= (4096 * 8192 * 128) / 8 = 536870912 bytes = 512 MB

시나리오 #2:


# of CPU's = 16
DB_BLOCK_SIZE = 8192
Total RAM = 16 GB

SETS_PER_POOL = 2 * CPU_COUNT = 32
_DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*32 = 256
MIN(AWE_WINDOW_MEMORY) = (4096*DB_BLOCK_SIZE * _DB_BLOCK_LRU_LATCHES) / 8
= ( 4096 * 8192 * 256) / 8 = 1073741824 bytes = 1024 MB

주의 !!!
1. ORA-27102 는 AWE_WINDOW_MEMORY 최소값 이하일때도 발생하지만, BUFFER CACHE 가
실제 메모리보다 크게 지정된 경우에도 발생한다.
2. ORA-27102 는 DB_BLOCK_BUFFER < AWE_WINDOW_MEMORY 일때도 발생한다.
3. AWE_WINDOW_MEMORY 설정값은 "계산된 최소값 + 10 MB (overhead)" 으로 설정해야한다.
4. Hyperthreading enabled 시스템의 경우 # of CPU's 를 두배로 계산해야한다.

4. Windows 에서 Oracle 메모리 사용량 모니터링
TASK MANAGER 에서 VM 값은 정확하지 않으므로 관리도구에서 별도 모니터링해야한다.
관리도구 => Perfomance 선택 => "추가" => 성능개체:Process, Count:Virtual Bytes, Instance:oracle.exe 선택

5. Windows 에서 Oracle 메모리 사용량 줄이는 방법

(1) Oracle 실행파일 스택 크기 조정
Thread 들이 미리 1MB 스택을 PGA 로 선점하고 필요하게 되면 더 확장해서 사용하는데
대부분들의 Thread 들은 초기 스택도 사용하지 않는 경우가 많다.
아래처럼 default=1 MB 를 500 KB로 줄일 수 있다.

. DB 내린 후 ORACLE_HOME/bin 에서 수행
C:OHbin> orastack oracle.exe 500000
C:OHbin> orastack tnslsnr.exe 500000
C:OHbin> orastack svrmgrl.exe 500000

(2) Shared Server (pre-Oracle9i 는 MTS 설정) 사용: 세션들이 메모리를 공유하므로 Oracle 프로세스 전체적인 메모리를 줄일 수 있다.


References


Note 225349.1 - Implementing Address Windowing Extensions (AWE) or VLM on Windows Platforms
Note.205089.1 - Oracle and Hyperthreading

 

 

 

from otn....


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Q&A Oracle관련 게시물만 Sean 2014.04.09 84911
76 Tip 통계복원하기 고구마 2013.05.13 8054
75 Tip 유저별 Segment 개수 및 사이즈 조회 쿼리, n2bfree 2013.03.12 11055
74 Tip online reorg script 담벼락 2013.01.10 10630
73 Tip 오라클11g에서 SE1,SE,EE제품의 옵션비교입니다. file perfstat 2012.03.07 27015
72 Tip 오라클 업그레이드 메뉴얼 1 file perfstat 2012.02.06 11894
71 Tip LIBRARY CACHE PIN 고구마 2011.11.10 12949
70 Tip ORACLE 10G CONVERTING TABLESPACES WITH THE RMAN CONVERT 1 흑수건 2011.10.20 11949
69 Tip 11g alertlog 1 흑수건 2011.10.06 14423
68 Tip DATABASE에 CONNECT안될때 SYSTEMSTATE DUMP하는법 흑수건 2011.10.06 10657
67 Tip [10g]DATAPUMP IMPORT는 자동으로 USER 생성 흑수건 2011.10.06 16784
66 Tip [11g] New Feature : Invisible Index 1 흑수건 2011.10.06 11357
65 Tip EXPORT의 Query Option 기능 흑수건 2011.10.01 11840
64 Tip 특정 DB USER의 SESSION수를 제한하는 방법 흑수건 2011.10.01 12391
63 Tip 오라클상세 버젼 확인하기 lsinventory 고구마 2011.09.14 13847
» Tip Windows 32bit OS 메모리 제약과 Oracle 에서 추가메모리 사용하도록 흑수건 2011.09.04 15775
61 Tip SESSIONS: derived (1.1 * PROCESSES + 5) 흑수건 2011.08.30 11322
60 Tip cpu 사용이 높을때 흑수건 2011.08.30 11489
59 Tip hardparse 발생및 세션 검사 2 도로시 2011.08.17 12666
58 Tip ora-3113 에러 분석 접근관련... 고구마 2011.06.14 12790
57 Tip 오라클 제품 비교 file 송기성 2011.05.22 13417
Board Pagination Prev 1 2 3 4 Next
/ 4