2._SQL_처리과정
2012.04.05 17:38
. 소프트 파싱 : 파싱 단계에서 SQL 커서를 메모리에서 찾아 곧바로 실행단계로 넘어가는것
. 파드파싱 : 최적화 및 ROW-SOURCE 생성 단계를 거치는 것
Call Count CPU Time Elapsed Time Disk Query Current Rows
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Parse 1 0.003 0.003 0 14 0 0
Execute 1 0.000 0.000 0 0 0 0
Fetch 68 0.000 0.002 0 79 0 668
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Total 70 0.003 0.005 0 93 0 668
Misses in library cache during parse: 1
--> SQL 커서를 찾지 못해 하드 파싱
Misses in library cache during parse가 0 이었다면 최초 수행 할때부터 이미 다른 세션에 의해 커서가 캐싱
(1) SQL 파싱
. SQL 파서 : 사용자가 던진 SQL을 가장 먼저 받아서 처리
1. SQL 문장을 이루는 개별 구성요소를 분석하고 파싱해서 파싱 트리를 만듬
-> SQL에 문법적 오류가 없는지 Syntax체크
2. Semantic 체크를 통해 의미상 오류가 없는지 확인
-> 존재하지 않거는 권한 없는 오브젝트를 사용했을때 오류
3. 해싱 알고리즘을 이용해 해당 SQL 커서가 Shared Pool에 캐싱돼 있는지 확인
(2) SQL 최적화
. 옵티마이저가 최적화를 수행할 때 세부적으로 아래의 서브 엔진을 사용
. Query Transfomer : 사용자가 던진 SQL을 최적화하기 쉬운 형태로 변환
. Plan Generator : 하나의 쿼리를 수행하는데 있어, 후보군이 될만한 실행계획 들을 생성
. Estimator : 쿼리 오퍼레니션 각 단계의 선택도, 카디널리티, 비용을 계산하 고 실행계획 전체에 대한 총 비용을 계산,
각 단계를 수행하는데 필요한 I/O, CPU, 메모리 사용량 등을 예측하기 위해 데이터베이스 오브젝트 통계정보와
하드웨어적인 시스템 성능 통계정보를 이용
. 5개의 테이블을 조인하려면 5! 의 실행계획을 평가 해아함
-> 현실적으로 모든 실행계획을 평가하는 것은 불가능 하므로 오라클은 지능적인 테크닉 사용
1. Adaptive Search Strategy : 총 수행 시간에 비해 쿼리 최적화에 걸리는 시간이 일정비율을 넘지 않도록 적응적 탐색 전략
2. Multiple Initial ordering heuristic : 최적의 실행계획을 발견할 가능성이 높은 순서대로비용을 평가
(3) Row-Source Generation
. 개념 수준의 실행계획
-> 실행 가능한 코드 또는 프로시저 형태로 포맷팅하는 작업이 필요함
-> Row-Source Gerator가 담당
. 하드 파싱은 CPU를 많이 소비하는 작업
. 내부적으로 많은 데이터 딕셔너리 조회를 수반함
. 파싱과정을 거친 SQL커서를 재사용할 수 있도록 캐싱해두는 공간 -> 라이브러리 캐시
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 66 | 부록 | 남송휘 | 2012.06.05 | 3691 |
| 65 | 8._IO_효율화_원리 | 운영자 | 2012.06.05 | 5797 |
| 64 |
3._Deterministic_함수_사용_시_주의사항
| 정찬호 | 2012.05.29 | 5581 |
| 63 | 2._Cursor_Sharing | 운영자 | 2012.05.28 | 7739 |
| 62 | 7._Result_캐시 | 운영자 | 2012.05.27 | 5811 |
| 61 |
3._Single_Block_vs._Multiblock_IO
| 정찬호 | 2012.05.22 | 5449 |
| 60 |
2._Memory_vs._Disk_IO
| 정찬호 | 2012.05.22 | 5632 |
| 59 |
1._블록_단위_IO
| 정찬호 | 2012.05.22 | 5213 |
| 58 |
6장._IO_효율화_원리
| 정찬호 | 2012.05.22 | 5055 |
| 57 |
1._Library_Cache_Lock_Pin
| 남송휘 | 2012.05.21 | 5319 |
| 56 |
6._RAC_캐시_퓨전
| 남송휘 | 2012.05.21 | 19036 |
| 55 | 5._Direct_Path_IO | 남송휘 | 2012.05.21 | 8957 |
| 54 |
4._Prefetch
| 남송휘 | 2012.05.21 | 4861 |
| 53 | 8._PLSQL_함수_호출_부하_해소_방안 | 남송휘 | 2012.05.21 | 4726 |
| 52 | 5._Fetch_Call_최소화 [1] | 박영창 | 2012.05.15 | 8334 |
| 51 |
7._PLSQL_함수의_특징과_성능_부하
| 남송휘 | 2012.05.14 | 7934 |
| 50 | 6._페이지_처리의_중요성 | 남송휘 | 2012.05.14 | 4553 |
| 49 | 4._Array_Processing_활용 | 시와처 | 2012.05.13 | 5015 |
| 48 |
3._데이터베이스_Call이_성능에_미치는_영향
| 시와처 | 2012.05.13 | 4619 |
| 47 |
10._Dynamic_SQL_사용_기준
| 남송휘 | 2012.05.07 | 5785 |