기술 정보
home
채널 소개
home

SQL 실행 플랜 삭제 방법

문서 유형
기술 정보
분야
튜닝
키워드
flush
optimizer
plan
ppc
SQL_PLAN
적용 제품 버전
6FS06
6FS07
6FS07PS

개요

Oracle의 DBMS_SHARED_POOL.PURGE 패키지 기능과 같이 DB 메모리에 저장되어 있는 SQL 실행 플랜을 삭제하는 방법입니다.

방법

Tibero에서는 실행 플랜 삭제를 위해 ALTER SYSTEM FLUSH PPC; 명령어를 사용합니다.
기능 사용 방법은 아래와 같습니다.
alter system flush ppc <child_number> '<sql_id>';
SQL
복사
1.
삭제하려는 physical plan 확인 (SQL_ID : f6kwymknrt7z1)
SQL> SET AUTOT ON SET ROWS OFF SELECT COUNT(*) FROM TAB; 1 row selected. SQL ID: f6kwymknrt7z1 Child number: 28738 Plan hash value: 3443268965 Execution Plan -------------------------------------------------------------------------------- 1 COLUMN PROJECTION (Cost:40, %%CPU:0, Rows:1) 2 SORT AGGR (Cost:40, %%CPU:0, Rows:1) 3 INDEX JOIN (Cost:40, %%CPU:0, Rows:30) 4 TABLE ACCESS (ROWID): _DD_OBJ (Cost:39, %%CPU:0, Rows:223) 5 INDEX (RANGE SCAN): _DD_OBJ_IDX2 (Cost:6, %%CPU:0, Rows:540) 6 FILTER (Cost:2, %%CPU:0, Rows:1) 7 INDEX (UNIQUE SCAN): _SYS_CON13700693 (Cost:2, %%CPU:0, Rows:1) Predicate Information -------------------------------------------------------------------------------- 4 - filter: (("_DD_OBJ"."TYPE_NO") IN ((1),(2),(3))) (0.107) 5 - access: ("_DD_OBJ"."OWNER_ID" = USERENV('SCHEMAID')) (0.035) 6 - filter: (("_DD_OBJ"."TYPE_NO") IN ((1),(2),(3))) (0.107) 7 - access: ("T"."TYPE_NO" = "_DD_OBJ"."TYPE_NO") (0.048) NAME VALUE ------------------------------ ---------- db block gets 0 consistent gets 191 physical reads 0 redo size 0 sorts (disk) 0 sorts (memory) 7 rows processed 1
SQL
복사
2.
 V$SQL에 해당 SQL_ID 조회하여 존재 여부 확인
SQL> SET AUTOT OFF SET ROWS ON SELECT SQL_ID, CHILD_NUMBER, SQL_TEXT FROM V$SQL WHERE SQL_ID = 'f6kwymknrt7z1'; SQL_ID CHILD_NUMBER SQL_TEXT ------------- ------------ -------------------------------------------------- f6kwymknrt7z1 28738 SELECT COUNT(*) FROM TAB
SQL
복사
3.
 SQL_ID : f6kwymknrt7z1 인 physical plan 삭제
SQL> ALTER SYSTEM FLUSH PPC 28738 'f6kwymknrt7z1'; System altered.
SQL
복사
4.
V$SQL로 조회하여 삭제 확인
삭제되었기 때문에 존재하지 않음으로 표시됩니다.
SQL> SELECT SQL_ID, CHILD_NUMBER, SQL_TEXT FROM V$SQL WHERE SQL_ID = 'f6kwymknrt7z1'; 0 row selected.
SQL
복사
주의
1.
1번 노드에서 생성된 플랜은 1번 노드에서 아래 기재된 SQL 문구를 수행해야 삭제됩니다.
alter system flush ppc <child_number> '<sql_id>';
SQL
복사
2.
sql_idchild_number 없이 alter system flush ppc; 수행할 경우 모든 플랜이 삭제되므로 사용할 때 alter system flush ppc; 수행하지 말아야 합니다.