Describe SharedPoolSize예상 here {{{ 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; }}}