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 컴럼의 값이 증가 합니다.
요점은 바인딩 변수를 써야한다..
'프로그래밍 > 오라클' 카테고리의 다른 글
SQL Server 구성 관리자가 없어졌다.. (0) | 2020.07.03 |
---|---|
MS SQL SERVER 외부접속 테스트 (0) | 2016.02.03 |
oracle create user (0) | 2013.01.15 |
ORACLE SQL.CTL 파일 문자열 잘라 insert 하기 (0) | 2012.05.25 |
Oracle Character Set View SQL (0) | 2012.05.24 |