본문 바로가기

SQLP

SQLP - 인덱스 기본 원리 @markdown # 인덱스 기본 원리____ ## 인덱스 구조### 인덱스 기본 구조- 인덱스는 데이터를 빨리 찾도록 돕는다- 루트 : 데이터 값 범위를 나타내는 키값- 브랜치 블록 : 키 값에 해당하는 블록을 찾는 데 필요한 주소 정보- 리프 블록 : 데이터가저장되 있는 블록![](http://wiki.gurubee.net/download/attachments/26745270/pict_00000.jpg) ### 인덱스 탐색____- 수직적 탐색, 수평적 탐색![](http://wiki.gurubee.net/download/attachments/26745270/pict.jpg) ## 다양한 인덱스 스캔 방식____ ### Index Range Scan- 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐.. 더보기
SQLP - 쿼리변환(2) @markdown # 쿼리변환(2) ## 조건절 이행____- A 테이블에서 사용된 필터 조건이 조인 조건절을 타고 반대편 B 테이블에 대한 필터 조건으로 이행되는 경우 SELECT *FROM DEPT D, EMP EWHERE E.JOB = 'MANAGER'AND E.DEPTNO = 10AND D.DEPTNO = E.DEPTNO; -----------------------------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |----------------------------------.. 더보기
SQLP - 쿼리변환(1) @markdown # 쿼리변환(1) ## 쿼리변환이란____- 실행계획을 생성하고 비용을 계산하기에 앞서 사용자 SQL을 최적화에 유리한 형태로 재작성함![](http://wiki.gurubee.net/download/attachments/26745078/SQL_286.jpg)- Query Transformer가 역할 담당 ### 휴리스틱(Heuristic) 쿼리 변환- 규칙 기반(Rule-based) 최적화 기법- 결과만 보장된다면 무조건 쿼리 변환을 수행 ### 비용기반(Cost-based) 쿼리 변환- 변환된 쿼리의 비용이 더 낮을 때만 그것을 사용하고, 그렇지 않을때는 원본 쿼리 그대로 두고 최적화를 수행 ## 서브쿼리 Unnesting- 중첩된 서브쿼리를 풀어내는 것을 말함- 메인쿼리와 같은 레.. 더보기
SQLP - 데이터베이스 I/O 원리 @markdown # 데이터베이스 I/O 원리____ ## 블록단위 I/O- 데이터 파일에서 DB 버퍼 캐시로 블록을 적재할 때- 데이터 파일에서 블록을 직접 읽고 쓸때- 버퍼 캐시에 변경된 블록을 다시 데이터 파일에 쓸 때 ## 메모리 I/O vs 디스크 I/O### I/O 효율과 튜닝의 중요성- 디스크 데이터 입출력은 디스크의 액세스 암(Arm)이 움직이면서 헤드를 통해 데이터를 읽고 쓰기 때문에 느림- 메모리를 통한 입출력은 전기적 신호로 데이터를 읽기 때문에 빠름- 모든 DBMS는 읽고자 하는 블록을 먼저 버퍼 캐시에서 찾고, 없을 경우에는 디스크에서 데이터를 읽어 버퍼 캐시로 적재 한 후 읽기 작업을 수행- 디스크 I/O를 최소화하고 버퍼 캐시 효율을 높이는 것이 데이터베이스 I/O 튜닝의 목표.. 더보기
SQLP - 데이터베이스 Call과 네트워크 부하 @markdown # 데이터베이스 Call과 네트워크 부하- 서버 프로세스에게 작업을 지시하거나 결과집합을 요청할 때 모든 명령은 데이터베이스 Call을 통해 전달된다. ## 데이터베이스 Call 종류____### SQL 커서에 대한 작업 요청에 따른 구분- 1) Parse Call : SQL 파싱을 요청하는 Call- 2) Execute Call : SQL 실행을 요청하는 Call- 3) Fetch Call : SELECT문의 결과 데이터 전송을 요청하는 Call ### Call 발생 위치에 따른 구분#### 1) User Call- DBMS 외부로부터 요청되는 Call- User Call이 많은 Peek 시간대에 시스템 확장성을 떨어뜨리는 가장 큰 원인- User Call을 줄이기 위한 기술요소- ①.. 더보기
SQLP - SQL 파싱 부하 @markdown # SQL 파싱 부하## SQL 처리 과정____- 사용자는 구조화된 질의언어(SQL)을 통해 사용자가 원하는 결과집합을 정의- DBMS는 사용자의 SQL을 SQL 옵티마이저를 통해 실행계획으로 작성해줌Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=209 Card=5 Bytes=175) 1 0 TABLE ACCESS (BY INDEX ROWID) OF 'EMP' (Cost=2 Card=5 Bytes=85) 2 1 NESTED LOOPS (Cost=209 Card=5 Bytes=175)3 2 TABLE ACCESS (BY INDE.. 더보기
SQLP - 데이터베이스 아키텍처(2) @markdown # Oracle 아키텍처(2)_____## 메모리구조### 시스템 공유 메모리 여역- Oracle : System Global Area(SGA)- SQL Server : Memory Pool - 여러 프로세스가 동시에 엑세스 할 수 있는 메모리영역- 모든 DBMS는 공통적으로 사용하는 캐시 영역이 있음(DB버퍼캐시, 공유 Pool, 로그버퍼)- 그 외에 Large Pool, Java Pool 시스템 구조와 제어 구조를 캐싱하는 영역을 포함한다.- 여러 프로세스가 공유되기 때문에 내부적으로 Latch, 버퍼Lock, 라이브러리 캐시 Lock/Pin 같은 액세스 직렬화 매커니즘을 사용 ### 프로세스 전용 메모리영역- 오라클은 프로세스 기반의 아키텍처로 서버 프로세스가 자신만의 전용 메모리.. 더보기
SQLP - 데이터베이스 아키텍처(1) @markdown # Oracle 아키텍처(1) ## 아키텍처 개관____### Oracle 아키텍처![](http://wiki.gurubee.net/download/attachments/26744202/oracle.jpg)- 데이터베이스 : 물리적인 디스크에 저장된 데이터 집합(데이터 파일, 리두로그 파일, 컨트롤 파일)- 인스턴스 : 공유메모리(SGA)와 이를 액세스하는 프로세스 집합 ### SQL Server 아키텍처![](http://wiki.gurubee.net/download/attachments/26744202/sqlserver.jpg)- 하나의 인스턴스당 최고 32,767개의 데이터베이스를 정의해서 사용- 기본적으로 시스템데이터베이스가 만들어지면, 사용자데이터베이스를 추가하여 생성하는 구조.. 더보기
SQLP - 조인 수행 원리 @markdown ## NL Join____- NL 조인은 프로그래밍 이중 Loop와 유사한 방식으로 조인을 수행for 선행테이블(외부테이블)for 후행테이블(내부테이블)...- 먼저 선행 테이블의 조건을 만족하는 행을 추출하여 후행 테이블을 읽으면서 조인을 수행- 선행테이블의 조건을 만족하는 모든 행의 수만큼 반복수행- 결과 행의 수가 적은 테이블을 조인 순서상 선행 테이블로 선택하는것이 전체 일량을 줄일 수 있음- 랜덤 방식으로 데이터를 액세스하기 때문에 처리 범위가 좁은 조건이 먼저 선택되는게 유리하다.- NL Join 기법은 성공하면 바로 결과를 사용자에게 보여주므로 온라인 프로그램에 적당한 기법이다. ### NL Join 수행 방법- 1) 선행 테이블에서 주어진 조건을 만족하는 행을 찾음- 2).. 더보기
SQLP - 인덱스 기본 원리 @markdown ## 인덱스 특징과 종류____- 인덱스는 DB에서 원하는 데이터를 쉽게 찾을 수 있도록 도와준다.- 테이블을 기반으로 선택적으로 생성할 수 있는 구조- 인덱스의 목적은 검색 성능의 최적화 및 검색조건에 만족하는 데이터를 효과적으로 찾는 것 이다.- Oracle의 트리 기반 인덱스 종류 : B-트리, Bitmap, Reverse Key, Function-Based 등이 존재한다. ### 트리 기반 인덱스![](http://wiki.gurubee.net/download/attachments/26744587/SQL_244.jpg)- DBMS에서 가장 일반적인 인덱스(B-트리 인덱스)- B-트리 인덱스는 브랜치, 리프 블록 그리고 가장 상위 루트 블록으로 구성된다.- 브랜치 블록은 분기를 목.. 더보기