개요
- 쿼리 과정의 기초
- 쿼리 과정의 기초 단계
- 쿼리 수행 시간 계산 방법
아래 그림은 쿼리 동작 과정이다
3가지의 기초적인 단계로 나뉘는데
- 문의 분석 그리고 해석(Parsing and Translation)
- 최적화(Optimization)
- 평가(Evaluation)
Parsing and Translation
쿼리를 내부의 양식으로 변환하는데, 이때 관계대수(Relational algebra)로 번역된다
Parser은 문법검사와 릴레이션을 확인한다
컴파일러와 같은 역할을 수행한다
Evaluation
쿼리 평가 계획은 쿼리 실행 계획이라고도 한다.
쿼리 실행 엔진은 주어진 쿼리의 출력을 생성하는 역할을 한다. 쿼리 실행 계획을 가져와서 실행하고 마지막으로 사용자 쿼리에 대한 출력을 만듭니다
많은 양의 데이터 문제는 어떻게 좋은 실행 계획을 찾아낼 것 인지에 있다
Optimisation
관계대수 표현은 많은 동등한 표현을 가질 수 있다
각각의 관계대수 작업은 몇몇의 알고리즘을 사용해서 실행 될 수 있다
상세한 평가 계획을 명시하는 주석이 달린 표현을 평가 계획이라고 한다
- Plan 1 : use an index on balance to find accounts with balance < 2500
- Plan 2 : perform linear scan and discard accounts with balance >= 2500
쿼리 최적화란?
모든 동등한 실행 계획 가운데, 가장 수행시간이 적은 하나를 고르는 것
이러한 Cost(수행 시간)은 데이터베이스 catalog(목록)으로부터 통계적 정보를 사용해서 추정된다
e.g. 각 릴레이션의 튜플 갯수, 튜플의 크기, 릴레이션의 블록(Block)의 갯수
쿼리 수행시간 계산방법
많은 구성요소가 수행시간의 영향을 미친다
e.g. 디스크 접속, CPU, 그리고 네트워크 통신
다음을 기준으로 비용을 측정할 수 있다
- 응답시간 i.e. 쿼리에 답하는 경과시간 혹은
- 총 리소스 소비량
총 리소스 소비량을 비용 측정 기준으로 사용
- 응답시간을 측정하는 것은 어렵고, 리소스를 최소화하는 것이 공유 데이터베이스에서는 좋은 생각이다
단순성을 위해 CPU 비용을 무시한다
실제 시스템은 CPU 비용을 고려한다
병렬 시스템에 대해 네트워크 비용을 고려해야 한다.
각 운영 비용을 어떻게 추정하는지 설명한다
Disk에 출력 쓰기 비용은 포함하지 않는다
디스크 비용 측정(Disk cost)
- 탐색 횟수(Number of seeks)평균 탐색 비용
- 읽은 블록 수(Number of blocks read)평균값
- 쓴 블록 수(Number of blocks written) 평균값
Time to transfer on block은 블록 전송 시간
Time for one seek은 블록 탐색 시간
cost for 'b' block transfers plus 's' seeks은 'b' 블록 전송에 대한 비용 + 's' 탐색
간단하게 나타내기 위해 아래그림과 같이 표현 할 수 있다