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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
67 | Front Page | 운영자 | 2010.05.17 | 154865 |
66 | 4. Prefetch | balto | 2010.07.10 | 28434 |
65 | 5. 오라클 Lock | 휘휘 | 2010.06.07 | 26365 |
64 | 2. DB 버퍼 캐시 | 휘휘 | 2010.05.24 | 21916 |
63 | 3. SQL 트레이스 | balto | 2010.06.06 | 21175 |
62 | 1. 기본 아키텍처 [1] | 휘휘 | 2010.05.23 | 19899 |
61 | 2. 트랜잭션 수준 읽기 일관성 | 휘휘 | 2010.06.07 | 19568 |
60 | 5. Undo | 토시리 | 2010.05.31 | 18650 |
59 | 11. Shared Pool | 실천하자 | 2010.05.31 | 18511 |
58 | 9. Static vs. Dynamic SQL [1] | balto | 2010.07.04 | 18343 |
57 | 4. Array Processing 활용 | 휘휘 | 2010.07.05 | 18238 |
56 | 1 장. 오라클 아키텍처 | 운영자 | 2010.05.20 | 17842 |
55 | 5. Fetch Call 최소화 | 휘휘 | 2010.07.05 | 16839 |
54 | 9. ASH(Active Session History) | 실천하자 | 2010.06.14 | 15607 |
53 | 2. SQL 처리과정 | 휘휘 | 2010.06.28 | 15340 |
52 | 3. 버퍼 Lock [1] | 휘휘 | 2010.05.24 | 15225 |
51 | 6. 바인드 변수의 부작용과 해법 | 실천하자 | 2010.06.28 | 14664 |
50 | 1. Explain Plan | 실천하자 | 2010.06.06 | 14663 |
49 | 8. PL/SQL 함수 호출 부하 해소 방안 | 토시리 | 2010.07.11 | 14023 |
48 | 7. Result 캐시 | 휘휘 | 2010.07.19 | 12969 |