ps -ef | egrep "$ORACLE_SID" | awk '{print $2}' | xargs -n 1 ps vw \
| awk '{print $7-$10,$0;priv+=$7-$10;trs[$9]=$10} \
END{for(tsiz in trs){TRS+=trs[tsiz]}; print priv+TRS," :TOTAL (",priv,"private memory,",TRS,"shared code segments - TRS)"}' \
| sed '1p;/^0/d' | sort -n +0

접속한 유저의 ORACLE_SID 환경변수를 가져오므로 필요시 변경.

 

사용 예 )

[lfmalldb01d:/DBMS/LFMQ] ps -ef | egrep "$ORACLE_SID" | awk '{print $2}' | xargs -n 1 ps vw \
> | awk '{print $7-$10,$0;priv+=$7-$10;trs[$9]=$10} \
> END{for(tsiz in trs){TRS+=trs[tsiz]}; print priv+TRS," :TOTAL (",priv,"private memory,",TRS,"shared code segments - TRS)"}' \
> | sed '1p;/^0/d' | sort -n +0
0       PID    TTY STAT  TIME PGIN  SIZE   RSS   LIM  TSIZ   TRS %CPU %MEM COMMAND
164  62980774  pts/0 A     0:00    0   164   184    xx    16    20  0.0  0.0 tail -f /DBMS/LFMQ/LFDBA/batch/logs/clon_LFMQ.20230322 
168   4916192  pts/3 A     0:00    0   168   188    xx    16    20  0.0  0.0 tail -f alert_LFMQ.log 
536  27263876      - A     0:00    1   536   848    xx   266   312  0.0  0.0 /bin/ksh /DBMS/LFMQ/LFDBA/batch/scripts/02_RMAN_restore.sh
552  65405570      - A     0:00    0   552   864    xx   266   312  0.0  0.0 /bin/ksh /DBMS/LFMQ/LFDBA/batch/scripts/clon_LFMQ.sh.20230
752  11666330      - A     0:00    0   752   784    xx    13    32  0.0  0.0 ora_dism_LFMQ 
1080  27132932      - A    61:46    1  1084  1160    xx    78    80  0.0  0.0 mxg_sndf c LFMQ D 
1100  31916982      - A     0:30    2  1100  1200    xx    97   100  0.0  0.0 mxg_obsd -c LFMQ -OTHERD -i 10 -D 
16824  33292958      - A     0:00  453 16824 17404    xx   737   580  0.0  0.0 /DBMS/LFMQ/product/12c/bin/tnslsnr LFMQ -inherit 
21680  64684780      - A     0:00    0 21680 227184    xx 398736 205504  0.0  0.0 ora_tt01_LFMQ 
21936   2687940      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_mman_LFMQ 
21936   3933090      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_psp0_LFMQ 
21936   5440628      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_vkrm_LFMQ 
21936  19071944      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_clmn_LFMQ 
21936  25428778      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_vktm_LFMQ 
21936  27657160      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_pmon_LFMQ 
21936  32113800      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_reco_LFMQ 
21936  32179106      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_pman_LFMQ 
21936  34538574      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_pxmn_LFMQ 
21936  59507318      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_diag_LFMQ 
21936  59965698      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_tmon_LFMQ 
21936  63635820      - A     0:00    0 21936 227440    xx 398736 205504  0.0  0.0 ora_smon_LFMQ 
22000  22414500      - A     0:00    0 22000 227504    xx 398736 205504  0.0  0.0 ora_mmon_LFMQ 
22256  61604748      - A     0:00    0 22256 227760    xx 398736 205504  0.0  0.0 ora_o000_LFMQ 
22448   3408896      - A     0:00    0 22448 227952    xx 398736 205504  0.0  0.0 ora_svcb_LFMQ 
22448   5571450      - A     0:06    0 22448 227952    xx 398736 205504  0.0  0.0 ora_mmnl_LFMQ 
22832   5702820      - A     0:01    0 22832 228336    xx 398736 205504  0.0  0.0 ora_dbrm_LFMQ 
24176   3539926      - A     0:01    0 24176 229680    xx 398736 205504  0.0  0.0 ora_fenc_LFMQ 
24816  52560520      - A     0:00    0 24816 230320    xx 398736 205504  0.0  0.0 ora_gen0_LFMQ 
25008  22938874      - A     0:00    0 25008 230512    xx 398736 205504  0.0  0.0 ora_rbal_LFMQ 
25200   9962302      - A     0:00    0 25200 230704    xx 398736 205504  0.0  0.0 ora_asmb_LFMQ 
25712  24183766      - A     0:00    0 25712 231216    xx 398736 205504  0.0  0.0 ora_ofsd_LFMQ 
25712  26805160      - A     0:00    0 25712 231216    xx 398736 205504  0.0  0.0 ora_gen1_LFMQ 
26032  11076438      - A     0:00    0 26032 231536    xx 398736 205504  0.0  0.0 ora_lgwr_LFMQ 
27248  64225762      - A     0:02    0 27248 232752    xx 398736 205504  0.0  0.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
27376   9438136      - A     0:00    0 27376 232880    xx 398736 205504  0.0  0.0 ora_ckpt_LFMQ 
28016   8520670      - A     0:00    0 28016 233520    xx 398736 205504  0.0  0.0 ora_lreg_LFMQ 
28848   1311664      - A     0:00    0 28848 234352    xx 398736 205504  0.0  0.0 ora_dbw3_LFMQ 
28848   3736714      - A     0:00    0 28848 234352    xx 398736 205504  0.0  0.0 ora_dbw1_LFMQ 
28848  14943182      - A     0:00    0 28848 234352    xx 398736 205504  0.0  0.0 ora_dbw5_LFMQ 
28848  61997408      - A     0:00    0 28848 234352    xx 398736 205504  0.0  0.0 ora_dbw6_LFMQ 
28848  65274420      - A     0:00    0 28848 234352    xx 398736 205504  0.0  0.0 ora_dbw7_LFMQ 
28848  65405338      - A     0:00    0 28848 234352    xx 398736 205504  0.0  0.0 ora_dbw4_LFMQ 
28848  65929692      - A     0:00    0 28848 234352    xx 398736 205504  0.0  0.0 ora_dbw2_LFMQ 
30896  24839072      - A     0:00    0 30896 236400    xx 398736 205504  0.0  0.0 ora_dbw0_LFMQ 
45104   1049490      - A     0:00    0 45104 250608    xx 398736 205504  0.0  0.0 ora_tt00_LFMQ 
45680   7537580      - A     0:00    0 45680 251184    xx 398736 205504  0.0  0.0 ora_arc3_LFMQ 
45680  53019128      - A     0:00    0 45680 251184    xx 398736 205504  0.0  0.0 ora_arc1_LFMQ 
46000  54722908      - A     0:00    0 46000 251504    xx 398736 205504  0.0  0.0 ora_arc0_LFMQ 
46000  55050626      - A     0:00    0 46000 251504    xx 398736 205504  0.0  0.0 ora_arc2_LFMQ 
63032  55575448      - A    1173:59 1328 63544 64148    xx  1118  1116  0.0  0.0 mxg_rts c LFMQ r D 
73456  18285624      - A     0:01    3 73456 278960    xx 398736 205504  0.0  0.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
75120   8717264      - A     0:25    0 75120 280624    xx 398736 205504  0.0  0.0 ora_dia0_LFMQ 
82096  20054886      - A     0:00    0 82096 287600    xx 398736 205504  0.0  0.0 ora_mark_LFMQ 
1616696  51118350      - A     5:16    1 1616696 1822200    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
1616696  60621190      - A     5:05    0 1616696 1822200    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
1682296  10027908      - A     4:11    1 1682296 1887800    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
1682296  10421162      - A     4:33    2 1682296 1887800    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
1682296  11601008      - A     4:58    2 1682296 1887800    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
1682296  15074266      - A     5:00    2 1682296 1887800    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
1682296  16974894      - A     5:21    0 1682296 1887800    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
1682296  30736686      - A     5:14    0 1682296 1887800    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
1682296  56426814      - A     5:24    0 1682296 1887800    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
1682296  65012452      - A     4:47    1 1682296 1887800    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
1682936  60948954      - A     5:36    1 1682936 1888440    xx 398736 205504  0.1  2.0 oracleLFMQ (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)
20014808  :TOTAL ( 19807064 private memory, 207744 shared code segments - TRS)

맨 마지막에 20014808 가 총 사이즈로 단위는 KB로 본 예제에서는 총 20G 정도 사용 중.

 

'OraclE' 카테고리의 다른 글

sqlarea 쿼리 확인  (0) 2022.07.21
SPM - 튜닝된 SQL의 실행계획을 등록하고 적용 하는 방법  (0) 2022.06.13
SPM(SQL PLAN MANAGEMENT)  (0) 2022.06.13
OGG 동기화 테이블 추가  (0) 2022.04.04
active session history  (0) 2022.01.30
제품 : Database

작성날짜 : 2007-12-21

PURPOSE
-------

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:\OH\bin> orastack oracle.exe 500000
C:\OH\bin> orastack tnslsnr.exe 500000
C:\OH\bin> 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

'OraclE' 카테고리의 다른 글

ASSM에서 Freelist 관리  (0) 2008.09.25
DBA Table / View 정리  (0) 2008.09.17
오라클에서 시퀀스(SEQUENCE) 사용하기  (0) 2008.09.17
BITMAPPED INDEX  (0) 2008.08.12
REVERSE KEY INDEX  (0) 2008.08.12

+ Recent posts