본문 바로가기

프로그래밍/오라클

Oracle Shared Pool

반응형

SHARED_POOL

select sql_text

,version_count

,loads

,invalidations

,parse_calls

,sorts

from v$sqlarea

where command_type in (2,3,6,7)

order by first_load_time desc,sql_text;

sql_text version_count loads invalidations parse_calls sorts

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

select ename, sal from myemp order by job, ename 1 1 0 1 1

select job, sum(sal) from myemp 1 1 0 0 0

select job, sum(sal) from myemp group by job 1 1 1 0 0

SHARED_POOL CLEAR방법

conn / as sysdba

alter system flush shared_pool;

command_type의

2는 insert

3은 select문

6은 update문

7은 delete문

Version_count : 사용자 계정은 다르지만 테이블 이름이 같은 경우에 이를 식별하기 위해 사용하는 컬럼 입니다. 만약 서로 다른 계정에서 각각 만든 이름이 같은 테이블을 실행시 SQL_TEXT는 하나만 존재 하지만 version_count는 다르게 나타납니다. 만약 scott계정의 myemp 테이블에서 select * from myemp를 실행 후 sys계정에서 myemp를 똑같이 만들어 실행 한다면 나중에 실행되는 select * from myemp만 X$SQLAREA로 조회되며 version_count는 2가 되는 것입니다.

Load : parsing시 SQL문이 Library Cache 영역에서 발견되지 않으면 parsing후 parse 정보를 library cache로 로딩하게 됩니다. Loads가 1이라면 처음으로 로드 된 것을 의미 합니다. 즉 Library Cache에 로드된 횟수를 나타내므로 1보다 큰 경우엔 좋지 못합니다.

Invalidation : library cache에 이미 SQL문장이 한번 이상 수행되었다고 할 때 그 SQL문장은 로드되어 있을 겁니다. 그때 사용자가 alter table, drop, analyze등을 myemp에 대해 수행 했다고 한다면 현재 library cache에 있는 parsing 정보에 대해 더 이상 무결성을 보장 할 수 없으므로 SQL문이 실행 된다면 다시 parse 과정을 거치게 됩니다. 그러한 경우에 invalidations 컬럼이 set 됩니다.

parse_calls : 실행한 SQL 문장이 처음 사용된 문장이라면 LOADS 컬럼에 1이 할당 됩니다. 이후 다른 사용자(또는 동일한 세션)에 의해 SQL문장이 재사용 되어 진다면 PARSING은 발생하지 않고 이미 PARSING된 정보를 재 사용 합니다. 이때 parse_calss 컴럼의 값이 증가 합니다.

요점은 바인딩 변수를 써야한다..

반응형