7. 세션 커서 캐싱
2010.06.29 03: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 |
2. 트랜잭션 수준 읽기 일관성
![]() | 휘휘 | 2010.06.06 | 20213 |
46 | 3. 비관적 vs. 낙관적 동시성 제어 | 휘휘 | 2010.06.06 | 8329 |
45 | 4. 동시성 구현 사례 | 토시리 | 2010.06.06 | 11079 |
44 |
5. 오라클 Lock
![]() | 휘휘 | 2010.06.06 | 26512 |
43 |
7. Response Time Analysis 방법론과 OWI
![]() | balto | 2010.06.13 | 8202 |
42 | 8. Statspack / AWR | balto | 2010.06.13 | 12910 |
41 | 9. ASH(Active Session History) | 실천하자 | 2010.06.13 | 15731 |
40 | 11. End-To-End 성능관리 | 휘휘 | 2010.06.13 | 8248 |
39 |
12. 데이터베이스 성능 고도화 정석 해법
![]() | 휘휘 | 2010.06.13 | 7248 |
38 |
5. V$SYSSTAT
[1] ![]() | 토시리 | 2010.06.13 | 9977 |
37 | 10. V$SQL | 실천하자 | 2010.06.13 | 12803 |
36 | 6. V$SYSTEM_EVENT | 토시리 | 2010.06.14 | 6641 |
35 |
3. 라이브러리 캐시 구조
![]() | balto | 2010.06.27 | 9957 |
34 |
4. 커서 공유
![]() | balto | 2010.06.27 | 9324 |
33 |
1. SQL과 옵티마이저
![]() | 휘휘 | 2010.06.27 | 7326 |
32 |
2. SQL 처리과정
![]() | 휘휘 | 2010.06.27 | 20929 |
31 | 4장. 라이브러리 캐시 최적화 원리 | 휘휘 | 2010.06.27 | 7032 |
30 | 5. 바인드 변수의 중요성 | 실천하자 | 2010.06.27 | 11862 |
29 |
6. 바인드 변수의 부작용과 해법
![]() | 실천하자 | 2010.06.27 | 14868 |
» |
7. 세션 커서 캐싱
![]() | 토시리 | 2010.06.29 | 10711 |