본문 바로가기

oracle10R2

shared pool 사이즈 예상방법

CREATE OR REPLACE FUNCTION calc_shared_pool(max_users IN NUMBER)

RETURN NUMBER

IS

--------------------------------------------------

-- 반드시 as sysdba 권한을 가진 사용자로 접속한다.

--------------------------------------------------

session_id NUMBER; --sample session id

session_uga_max NUMBER; -- session uga_memory max

sql_area NUMBER;

plsql_area NUMBER;

temp NUMBER;

BEGIN

-- 하나의 세션이 가지는 메모리에 대한 샘플 세션을 가져온다.

SELECT id INTO session_id

FROM (SELECT sid AS id

FROM v$process p, v$session s

WHERE p.addr = s.paddr

ORDER BY dbms_random.VALUE)

WHERE ROWNUM = 1;

--dbms_output.put_line('샘플 세션 ID : ' || session_id);

--해당 세션에 가질 수 있는 최대 메모리

SELECT VALUE INTO session_uga_max

FROM v$sesstat s, v$statname n

WHERE s.statistic# = n.statistic#

AND n.NAME = 'session uga memory max'

AND sid = session_id;

--dbms_output.put_line('해당 세션에 가질 수 있는 최대 메모리 : ' || session_uga_max);

--Total Shared SQL Area

SELECT SUM(sharable_mem) INTO sql_area

FROM v$sqlarea;

--PL/SQL Sharable Memory Area

SELECT SUM(sharable_mem) INTO plsql_area

FROM v$db_object_cache;

--최소 Shared Pool Size 계산

temp := (session_uga_max * max_users) + sql_area + plsql_area;

RETURN CEIL((temp + temp*0.3)/1024/1024);

END;

/

--Shared Pool의 크기는 이제부터다.

--Shared Pool 크기 계산을 위한 임시테이블을 생성후 주기적으로 아래와 같은

--Insert ~ Select 문을 이용해서 삽입한후 마지막으로 가장 큰 값을 찾아낸다.

CREATE TABLE temp_shared_pool_size(nSIZE NUMBER);

INSERT INTO temp_shared_pool_size

SELECT calc_shared_pool(400) "최소 Shared Pool Size(MB)"

FROM dual;

--이 결과는 Shared Pool의 최소 크기임을 명심해야 한다. 되도록이면 더 크게 잡아준다.

SELECT MAX(nSIZE) FROM temp_shared_pool_size;


'oracle10R2' 카테고리의 다른 글

ASM  (0) 2011.06.22
Oracle DICTIONARY  (0) 2011.06.20
SQL * Loader  (0) 2011.06.20
Library Cache  (0) 2011.06.20
enqueues  (0) 2011.06.20