본문 바로가기

빅데이터과정/WORKSHOP 2

#30_140724_WSHOP2_LARGE POOL

728x90

# LARGE POOL




Large pool 의 역할

병렬 작업을 하기위한 메모리 영역
Rman으로 백업과 복구를 수행했을 떄 사용하는 메모리 영역
예 : SQL> select /*+ parallel(emp,4) */ ename, sal
from emp
where job='SALESMAN';
낮에 중요한 오라클 메모리 영역 : database buffer cache 영역(db_cache_size), 그림의 온라인 영역
밤에 중요한 오라클 메모리 영역 : larget pool(large_pool_size), 그림의 일괄 처리 작업




위의 메모리 사이즈 관리 작업을 자동화 하는 기능이 오라클에 무엇인가?
ASMM(automatic Shared Memory Management) 기능

ASMM 기능을 쓰려면 어떻게 해야되는가?

10g 버전 : sga_target 파리미터를 0이 아닌 값으로 설정
11g 버전 : memory_target 파라미터를 0이 아닌 값으로 설정
: SQL> show parameter memory_target

SQL> show parameter memory_target
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memory_target                        big integer 404M



메모리 사이즈 확인하는 텍스트

-- Oracle Database 10g: Administration Workshop II
-- Oracle Server Technologies - Curriculum Development
--
-- ***Training purposes only***
-- ***Not appropriate for production use***
--
PROMPT *** Current parameter settings ***
col name format a12
col value format a8
show parameter sga_
PROMPT
PROMPT *** SGA Dynamic Component Size Information***
col component format a22
col current_size format a15
col min_size format a15

SELECT component,current_size/1048576||'M' current_size,
       min_size/1048576||'M' min_size
FROM v$sga_dynamic_components
WHERE component IN ('shared pool','large pool',
                   'java pool','DEFAULT buffer cache');

col name format a20
col value format a20
PROMPT *** Current parameter settings in V$PARAMETER ***

SELECT name, value, isdefault
FROM v$parameter
WHERE name IN ('shared_pool_size','large_pool_size',
               'java_pool_size', 'db_cache_size');



메모리 사이즈 확인 수행

   - 텍스트 수행결과 아래처럼 large pool과 java pool의 메모리 사이즈를 확인할 수 있다

SQL> @sga
*** Current parameter settings ***
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 404M
sga_target                           big integer 0
*** SGA Dynamic Component Size Information***
COMPONENT              CURRENT_SIZE    MIN_SIZE
---------------------- --------------- ---------------
shared pool            144M            144M
large pool             4M              4M
java pool              4M              4M
DEFAULT buffer cache   64M             64M
*** Current parameter settings in V$PARAMETER ***
NAME                 VALUE                ISDEFAULT
-------------------- -------------------- ---------
shared_pool_size     0                    TRUE
large_pool_size      0                    TRUE
java_pool_size       0                    TRUE
db_cache_size        0                    TRUE




자바 메모리 관리

아래의 자바 소스를 돌려면 메모리가 부족하게 되는데 자동으로 메모리 사이즈를 늘리는 것을 확인할 수 있다

-- Oracle Database 10g: Administration Workshop II
-- Oracle Server Technologies - Curriculum Development
--
-- ***Training purposes only***
-- ***Not appropriate for production use***
--
-- This scripts creates many java stored procedures
-- in the HR schema.
set echo on
DECLARE
i NUMBER;
v_sql VARCHAR2(200);
BEGIN
  FOR i IN 1..200 LOOP
    -- Build up a dynamic statement to create a uniquely named java stored proc.
    -- The "chr(10)" is there to put a CR/LF in the source code.
    v_sql := 'create or replace and compile' || chr(10) ||
             'java source named "SmallJavaProc' || i || '"'  || chr(10) ||
             'as' || chr(10) ||
             'import java.lang.*;' || chr(10) ||
             'public class Util' || i || ' extends Object' || chr(10) ||
             '{ int v1=1;int v2=2;int v3=3;int v4=4;int v5=5;int v6=6;int v7=7; }';
    EXECUTE IMMEDIATE v_sql;
  END LOOP;
END;
/
SQL> SELECT component,current_size/1048576||'M' current_size,
             min_size/1048576||'M' min_size
FROM v$sga_dynamic_components
현재 잡혀있는 메모리 사이즈를 확인하는 뷰
WHERE component IN ('shared pool','large pool',
                            'java pool','DEFAULT buffer cache');

COMPONENT              CURRENT_SIZE    MIN_SIZE
---------------------- --------------- ---------------
shared pool            144M            144M
large pool             4M              4M
java pool              20M             4M
java pool 이 4M 에서 20M 으로 변했다
DEFAULT buffer cache   48M             48M



자동 메모리 관리 기능을 끄는 명령어

memory_target = 0 설정
shared_pool_size = 140m
db_cache_size=60m
larget_pool_size=4m
java_pool_size=4m



momory_target 파라미터는 2가지 메모리를(SGA, PGA) 같이 관리한다

SGA 관리 파라미터 : SGA_TARGET
PGA 관리 파라미터(solt 작업) : PGA_AGGREGATE_TARGET


많은 양의 정렬작업을 해야 한다면 아래와 같이 작업을 해야 빨리 수행할 수 있다
(정렬에 대한 메모리 자동화 기능을 끄고 수동으로 작업해야 한다)

workarea_size_policy를 munual로 바꾸면 각각의 세션에 할당된 메모리를 사용하고 있는 유저에게 모두 할당한다

SQL> grant dba to sh;

SQL> connect sh/sh

SQL> alter session set workarea_size_policy = manual;
정렬작업에 대한 사이즈 관리를 수동으로 하는 명령어
alter session : 이 변경된 파라미터를 내 세션에서만 적용하도록 한다

SQL> alter session set sort_area_size = 10;
정렬 하는 메모리 사이즈를 10바이트로 하는 명령어

SQL> set timing on;

SQL> create table sales100 as
select * from sales;

SQL> create index sales_100 on sales100(amount_sold, prod_id);
과도한 정렬작업을 수행

SQL> drop index sales_100;

SQL> connect sh/sh

SQL> alter session set workarea_size_policy = manual;

SQL> alter session set sort_area_size = 1000000000;

SQL> create index sales_100 on sales100(amount_sold, pord_id);