DBA가 되고 싶은 병아리

Session cached cursors Hit Ratio 본문

Oracle Study/Performance Tuning

Session cached cursors Hit Ratio

미스틱스 2016. 6. 24. 14:09

-------------- Session cached cursors Hit Ratio ------------


1. Open_cursors

: 한 세션이 열수있는 최대 cursor 개수


2. Session_cached_cursors

: 열려있는 세션이 가질 수 있는 최대 Cursors 개수

SESSION_CACHED_CURSORS 파라메터는 동일한 SQL을 반복수행(3회이상)하는 경우에 유리하며, 보통 softer parse 라고 한다.

모듈별로 특정 SQL 들을 반복 수행하는 세션들에 설정시 SOFT 파싱부하를 감소시켜준다. 시스템이 내부 수행하는 ReCursive SQL 도 포함되므로 최소 30 이하로 설정하는것은 효과가 없으며 보통 50 이상을 권장한다.

동일한 SQL이 동일세션에서 3회 이상 수행 시 PGA에 해당 SQL의 Handle Address를 Caching하게 되며, Caching 정보를 토대로 해당 Bucket의 모든 Handle을 모두 검색하지 않고, Caching 되어 있는 Handle Address를 가지고 해당 Handle의 LCO에 Direct하게 탐색을 하게 되어 일반적인 Soft Parsing 보다 개선의 효과가 더 크다. 단, parse count가 자체가 줄어드는 것은 아니며, 탐색하는 시갂 즉 parsing time이 젃감하는 효과가 있다. Session_cached_cursors의 설정은 PGA에 해당 세션의 SQL(3회 이상 수행)을 Caching 하는 것으로, Library cache object를 pinned하지 않기 때문에 Soft Parsing이 발생하게 되는 것이다. 반면에 PL/SQL에서 사용되는 Hold Cursor(Static SQL)의 경우에는 library cache object를 Pinned한 상태에서 반복 수행되므로, soft parsing이 발생하지 않게 되는 것이다.


3. cursor_space_for_time = true[false]

: 세션에서 사용된 Cursor를 세션이 닫힐 때까지 SGA에 남겨놓는다.


4. cursor_shaing = [ EXACT, FORCE, SIMILAR ]

: cursor_sharing(FORCE, SIMILAR)을 설정 시 처음 수행되는 literal value를 bind value로 대체를 하게 되는데, 해당 cursor가 Memory에서 Aging out 되지 않을 경우 이후 수행되는 literal value에 대해서는 peek at the bind로 수행되게 된다.

peek at the bind로 해석되는 것은 "_optim_peek_user_bind"=TRUE로 해석되는 것과 동일하게 해석되는 것이다.

위와 같이 해석될 경우 system level에서 cursor_sharing를 설정하는 것은 상당히 위험해 질 수 있으므로, 해당 파라미터 세팅(FORCE,SIMILAR) 시에는 필히 SESSION LEVEL OR SQL LEVEL에서 제어를 할 필요가 있음.

부가적으로, cursor_sharing = force로 설정할 경우에는 rownum 사용에 주의를 하여야 한다. rownum = 1 과 같이 프로그램 작성시 cursor_sharing=force를 설정할 경우 rownum = :b1 과 같이 Oracle 내부적으로 변경되므로 젂체범위 처리 후에 해당 1건의 row를 추출하게 된다. 이때에는 rownum <= 1과 같이 변경 후 cursor_sharing=force를 설정하여야 한다.


출처 : http://hoonsik69.tistory.com/entry/Oracle-Cursor-%EA%B4%80%EB%A0%A8-Parameter