✅ $sql 조회항목
parse_call
: 라이브러리 캐시에서 SQL을 찾으려는 요청횟수loads
: 하드파싱을 거친 SQL 실행계획을 라이브러리 캐시에 적재한 횟수executions
: SQL을 수행한 횟수reloads
: 커서가 무효화된 횟수로, 커서가 참조하고 있는 오브젝트에 변화가 일어났음을 의미한다.
✅ 커서가 재사용되지 않는 경우 (공유커서의 무효화)
- 커서에서 참조하는 오브젝트의 변화 (DDL 등, DML은 무관하다.)
- 컬럼의 추가/삭제/변경 : 이전의 커서가 잘못된 컬럼참조를 할 수 있기 때문이다.
- 인덱스의 추가 : 이전에 수립된 실행계획이 최적이 아닐 수 있기 때문이다.
- 통계정보 생성 : 마찬가지로 이전에 수립된 실행계획이 최적이 아닐 수 있기 때문이다.
v$sql_shared_cursor
뷰를 통해 새로운 Child 커서가 기존 커서와 공유되지 못한 이유를 알 수 있다.✅ sql 작성 표준 예시
- 오라클 예약어는 대문자로 , 사용자 객체명은 소문자로 통일한다.
- 한줄에 쭈욱 나열하지 말고 의미가 달라지는 구문은 줄바꿈을 한다.
- 반복 수행문안에서 사용되거나 자주 사용되는 OLTP성 업무의 쿼리라면 치명적 바인드 변수를 사용한다.