수행한 SQL Cursor를 Flush 해아만 하는 상황이 종종 발생한다.
명령문은 아래와 같으며 살제 사용하는 방법은 아래 글을 참고 하시기 바랍니다.
[1] 아키텍처 확인
SQL을 수행하면 내부적으로 SQL Cursor(LCO = Library Cache Object) 로써,
SGA -> Shared Pool -> Shared SQL Area에 저장됩니다.
![](https://blog.kakaocdn.net/dn/orxNI/btsGx0qFYmC/pQOOKWkpH467ZBMIk6txA1/img.png)
[2] SQL을 10개 실행하여 Cursor 10개 생성
주석에 다른 숫자를 넣어 SQL FULL TEXT 서로 다르게 함.
SELECT /* KTH 1 */ * FROM EMP;
SELECT /* KTH 2 */ * FROM EMP;
SELECT /* KTH 3 */ * FROM EMP;
SELECT /* KTH 4 */ * FROM EMP;
SELECT /* KTH 5 */ * FROM EMP;
SELECT /* KTH 6 */ * FROM EMP;
SELECT /* KTH 7 */ * FROM EMP;
SELECT /* KTH 8 */ * FROM EMP;
SELECT /* KTH 9 */ * FROM EMP;
SELECT /* KTH 10 */ * FROM EMP;
[3] 10개 Sql Cursor 확인
3.1) 먼저 SQL_ID를 확인 위해 아래와 같이 V$SQL 조회
3.2) 위 3.1) 쿼리의 결과인 SQL_ID를 가지고, V$SQL_SHARED_CURSOR 를 조회해보자.
아래와 같이 모두 존재함을 알 수 있다.
Cursor LCO를 FLUSH 하기 위해서는, SQL의 ADDRESS와 HASH VALUE 를 알아야한다.이 정보는 V$SQL에도 있기 때문에 굳이 V$SQL_SHARED_CURSOR를 검색할 필요가 없다.아키텍처와 유사한 명칭의 DPV(Dynamic Performance View)를 보여주기 위해 참조 했을 뿐이다.
V$SQL도 Cursor의 메타데이터와 성능 수치를 제공한다.
![](https://blog.kakaocdn.net/dn/lYoFu/btsGu5mIREi/vWOAQpsC4LduR1f4Oi1Y0K/img.png)
[4] 10개 Sql Cursor Flush
4.1) 위 3.1 SQL 조회 하면 아래와 같이 출력된다. 여기 SHARE_POOL_PURGE 컬럼에 나온 실행문 모두 실행
![](https://blog.kakaocdn.net/dn/bEEge1/btsGwNMk4nh/iy2pZIMS1QivE4BIZpK4c1/img.png)
실행 ) 3번째 인자 'C'는 Cursor를 의미한다.
4.2) 실행 후 확인
- 3.1의 SQL을 재수행하면, SQL 10개가 Flush 되서 조회된 건수가 0 이다.
![](https://blog.kakaocdn.net/dn/mmcGE/btsGwKB2HaZ/BYf63dKbxShoBKQgj0uf40/img.png)
==================================================================
Hard Parsing 유도를 위해 위 스크립트로 Sql Cursor를 Flush 해도 되지만, 기존 Sql에 "스페이스" or "아무 문자"만 넣어도 Hard Parsing 처리가 가능하기 때문에 튜닝 프로젝트 진행 중에 사용해 본 적은 없다. 개인 공부를 위해 많은 테스트로 불필요한 Sql Cursor가 많아서 직관성이 떨어질때 가끔 수행 편이다.
하지만, 전반적인 어플리케이션 테스트를 위해 Sql Area에 등록되어 있는 Application Sql Cursor 모두 없애고 싶을때나,반드시 동일한 SQL을 Hard Parsing을 유도하여 튜닝 or 점검할때는 필요로 해보인다.
'ORACLE > DBA' 카테고리의 다른 글
Toad ArraySize 조정 방법 (0) | 2024.04.24 |
---|---|
PK 컬럼을 포함하는 일반 인덱스를 만들어도 될까? (0) | 2024.04.16 |
시퀀스 초기화 방법 (0) | 2024.04.12 |
파티션 테이블에 Unique 고찰 (0) | 2024.04.08 |
문제로 풀어보는 Partitioned Index (0) | 2024.04.06 |