7. 세션 커서 캐싱
2010.06.29 12:32
SQL수행에 따른 퍼포먼스 저하.
①소프트파싱. 즉, 파싱된 SQL구문을 또 다시 분석하지 말고, 공유함으로 하드파싱의 횟수를 낮춰서 효율을 올릴수 있다.
②쿼리수행후엔 커서를 닫고,
그로인해 세션커서가 할당받은 메모리 및 해당포인터는 해제된다.
③커서
오픈을 위한작업, library cache래치를 획득하여 라이브러리 캐시를 탐색하는 등의 작업이 발생하며, 이것은 부담스러운 작업이다..
④결국, 소프트파싱을 한다해도, SQL수행횟수가 많아지면 경합이 발생하게 된다.
⑤좀 더 부하를 줄이기 위해서는(③작업도
최소화하려면), 소프트파싱 이외에도 세션커서를 공유해야 한다..
♨오라클은 세션커서캐싱이라는 기능을 제공하여 ⑤를 실현한다.
세션커서를 공유함으로 해서 다음과 같은 잇점이 있다.
●SQL문을 파싱, 구문분석하고 라이브러리 캐시에서 커서를 탐색하는 과정 감소. (CPU사용량감소)
●소프트 파싱 과정에서 발생하는 래치요청횟수를 감소.
커서를 닫는 순간(②).
Parse Call횟수를 확인하여 3이
상이면 ”자주사용”으로 간주 해당 세션커서를 세션커서캐시로 옮긴다.
※세션커서캐시 내에서는, LRU
알고리즘을 이용, 사용빈도가 낮은 순으로 밀려난다.
◆session_cached_cursors 캐싱할 커서의 갯수. 0보다 큰값을 설정하면 Parse Call이 발생할때마다 세션커서캐시를 먼저살펴봄.
◆users_opening (v$sql항목) 공유커서를 참조하고 있는 세션커서의 수.
◆users_executing (v$sql항목) 해당 SQL을 현재 실행 중인, 즉 커서가 열려있는 세션커서의 수를 보여준다.
실습 1)
같은 SQL을 3번실행시켜보면, 3번째(Parse_Calls=3) 비로소 ?該커서가 공유커서를 참조(USERS_OPENING=1)하게 되는것을 볼 수 있다.
session cursor cache hits항목을 통해 이 기능의 활용 빈도를 측정할 수 있다.
실습 2)
session_cached_cursors
파라메타를 0으로 설정하고 INSERT문을 10000번 실행시켜본다.
이때의 session cursor cache hits와 parse count의 변화를 관찰해보자.
session cursor cache hits는 변화가 없고, parse count는 10000가량 늘은것을 알수있다.
실습 3)
session_cached_cursors
파라메타를 100으로 설정하고 INSERT문을 10000번 실행시켜본다.
insert문이 10000번 수행되는 동안, parse count와 함께 session cursor cache hits도 10000번가까이 증가했음을 알수 있다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
47 | 1. Library Cache Lock | balto | 2010.07.17 | 12803 |
46 | 8. Statspack / AWR | balto | 2010.06.13 | 12769 |
45 | 10. V$SQL | 실천하자 | 2010.06.14 | 12681 |
44 | 6. RAC 캐시 퓨전 | 토시리 | 2010.07.19 | 12634 |
43 | 7. PL/SQL 함수의 특징과 성능 부하 | 실천하자 | 2010.07.12 | 12607 |
42 | 8. 블록 클린아웃 | 휘휘 | 2010.05.31 | 12288 |
41 | 5. Direct Path I/O | balto | 2010.07.10 | 12192 |
40 | 11. Static SQL 구현을 위한 기법들 | 실천하자 | 2010.07.05 | 12086 |
39 | 5. 바인드 변수의 중요성 | 실천하자 | 2010.06.28 | 11768 |
38 | 3. 데이터베이스 Call이 성능에 미치는 영향 | 토시리 | 2010.07.07 | 11667 |
37 | 4. Redo | 휘휘 | 2010.05.24 | 11316 |
36 | 4. 동시성 구현 사례 | 토시리 | 2010.06.07 | 10945 |
» | 7. 세션 커서 캐싱 | 토시리 | 2010.06.29 | 10620 |
34 | 3. Deterministic 함수 사용 시 주의사항 | 실천하자 | 2010.07.19 | 10590 |
33 | 7. Consistent vs. Current 모드 읽기 | 휘휘 | 2010.05.31 | 10544 |
32 | 4. DBMS_XPLAN 패키지 | balto | 2010.06.06 | 10462 |
31 | 1. Call 통계 | 실천하자 | 2010.07.05 | 10446 |
30 | 6. 문장수준 읽기 일관성 | 토시리 | 2010.06.01 | 10434 |
29 | 2. Cursor_Sharing | balto | 2010.07.17 | 10215 |
28 | 3. 라이브러리 캐시 구조 | balto | 2010.06.28 | 9850 |