본문 바로가기

Oracle/Admin

[Oracle]Partition 작업 시 SQL 커서 및 실행 계획 변경

728x90
select address, hash_value, executions, loads, version_count, invalidations, parse_calls 
from v$sqlarea 
where sql_id='3zhcy1fagtrgv';

ADDRESS      HASH_VALUE EXECUTIONS        LOADS VERSION_COUNT INVALIDATIONS PARSE_CALLS
---------------- ---------- ---------- ---------- ------------- ------------- -----------
00000000C9875588 2499599867         3        1          1         0        3

 

현재 excutions가 3이고 loads가 1이고 parse_calls가 3이고 invalidations가 0임

라이브러리 캐시에 1번 적재되었고 3번 실행중 한번은 하드파싱, 2번은 소프트파싱되었고 무효화된적은 없는 쿼리라는 뜻임

parse_calls : 라이브러리 캐시에서 SQL 커서를 찾으려고 요청한 횟수

loads : 하드파싱을 거친 SQL 실행계획을 라이브러리 캐시에 적재한 횟수
executions : SQL을 수행한 횟수
invalidations : 커서가 무효화된 횟수, 커서가 참조하고 있는 오브젝트에 중요한 변화가 일어났음을 의미함


파티션 split 후 재확인

SQL> alter table PTABLE4 split partition p_max at ('202202') into (partition p202201, partition p_max);
 
Table altered.
 
SQL> 
select address, hash_value, executions, loads, version_count, invalidations, parse_calls 
from v$sqlarea 
where sql_id='3zhcy1fagtrgv';
 
ADDRESS      HASH_VALUE EXECUTIONS        LOADS VERSION_COUNT INVALIDATIONS PARSE_CALLS
---------------- ---------- ---------- ---------- ------------- ------------- -----------
00000000C9875588 2499599867         3        1          1         1        3

 

현재 다른건 그대로이고 invalidations가 1로 변경됨

SQL>
-- sql 2번 실행
select col2, col1 from ptable4 
where col2 in (select c1 from imsitb);
 
-- 확인
select address, hash_value, executions, loads, version_count, invalidations, parse_calls 
from v$sqlarea 
where sql_id='3zhcy1fagtrgv';
 
ADDRESS      HASH_VALUE EXECUTIONS        LOADS VERSION_COUNT INVALIDATIONS PARSE_CALLS
---------------- ---------- ---------- ---------- ------------- ------------- -----------
00000000F415D6C8 2499599867         2        2          1         1        2

 

 


loads가 2로 변했고 invaildations가 1이고 executions과 parse_calls는 초기화된 뒤 다시 2로 카운트됨

커서가 무효화 된 뒤(invaildations : 1) 라이브러리 캐시에 새로 load 되었고(loads : 2)

새로 load 된 이후 두번 실행됨(executions : 2) 그리고 하드파싱1번에 소프트파싱 1번됨(parse_calls) 



파티션 split 시 결론 

파티션을 split 하면 커서가 무효화되고 라이브러리 캐시에 새로 로드되게 된다.

=> 실행계획도 변경될 가능성이 있다.(새로 라이브러리 캐시에 로드되고 파싱을 새로 하기때문)



파티션 drop 시 결론 

파티션 split 시와 동일하게

파티션을 drop 하면 커서가 무효화되고 라이브러리 캐시에 새로 로드되게 된다.

=> 실행계획도 변경될 가능성이 있다.(새로 라이브러리 캐시에 로드되고 파싱을 새로 하기때문)


파티션 add 시 결론 

파티션 split, drop 시와 동일하게

파티션을 add 하면 커서가 무효화되고 라이브러리 캐시에 새로 로드되게 된다.

=> 실행계획도 변경될 가능성이 있다.(새로 라이브러리 캐시에 로드되고 파싱을 새로 하기때문)

+ 본문에 넣진않았지만 파티션 exchange 도 동일하게 무효화된다.


--> 즉 partiton split, drop, add, exchange 수행 시 모두 sql 커서가 무효화 되고 라이브러리 캐시에 새로 로드됨으로써
    실행계획이 변할 수 있다. 

728x90
반응형

'Oracle > Admin' 카테고리의 다른 글

[Oracle] single grid 환경에서의 oracle 재기동 방법  (0) 2024.09.19
[Oracle] 10046 event Trace 분석  (3) 2024.09.06
[Oracle] ADRCI  (0) 2024.08.17
[Oracle] OCR VIGING DISK 재구성  (0) 2024.08.14
[Oracle]GPnP(grid plug n play)  (0) 2024.08.14