dbms_shared_pool.purge - 항상 꿈꿔오던 기능
오라클 2008.04.14 15:49dbms_shared_pool.purge 프로시저가 그 것이다. 이 프로시저는 개인적으로 항상 꿈꿔왔던 기능을 제공한다. 그 기능이란 바로 원하는 특정 LCO(Cursor나 Procedure)를 콕 찝어서 Shared Pool에서 Flush 시키는 것이다.
SQL 문장을 튜닝하다 보면 특정 SQL 문장만 Shared Pool에서 내려버림으로써 하드 파스(Hard Parse)를 유도해야할 필요가 요구되곤 한다. 하지만, 이전 버전에서는 이런 기능이 제공되지 않기 때문에 Shared Pool을 통째로 Flush하거나, 테이블 정의를 바꾸고, 통계 정보를 수집해서 강제로 Invalidation을 시키거나 하는 편법을 사용해야 했다. 물론 이것이 얼마나 위험한 일인지는 잘 알 것이다.
아래에 dbms_shared_pool.purge 프로시저의 간단한 사용 예제가 있다.
UKJA@ukja11> select * from t_plan where c1 = 'X';
no rows selected
Elapsed: 00:00:00.00
UKJA@ukja11> select sql_id, address, hash_value
2 from v$sql
3 where sql_text like 'select * from t_plan where c1%';
SQL_ID ADDRESS HASH_VALUE
--------------------------------------- -------- ----------
bp49t90rx4nvf 2269CB44 802313070
1 row selected.
Elapsed: 00:00:00.09
UKJA@ukja11> exec sys.dbms_shared_pool.purge('2269CB44.802313070', 'C');
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.32
UKJA@ukja11> select sql_id, address, hash_value
2 from v$sql
3 where sql_text like 'select * from t_plan where c1%';
no rows selected
Elapsed: 00:00:00.06
이 기능은 11g에 추가되었고 10.2.0.4 PatchSet과 10.2.0.3, 10.2.0.2 Patch 등을 이용해 하위 버전에서도 사용 가능하다. 애석하게도 모든 OS에서 다 Patch가 제공되는 것은 아니다.
자세한 내용은 Exem Wiki를 참조한다.
'오라클' 카테고리의 다른 글
Explain Plan과 Clustering Factor (0) | 2008.04.22 |
---|---|
Secure View Merging - 10gR2 New Feature (3) | 2008.04.21 |
dbms_shared_pool.purge - 항상 꿈꿔오던 기능 (9) | 2008.04.14 |
gather_plan_statistics 힌트와 Parallel Query (0) | 2008.04.10 |
Wait Analysis의 힘 (0) | 2008.04.02 |