친절한 SQL 튜닝 스터디 - SQL 파싱과 최적화, 옵티마이저에 대해 알아보자
친절한 SQL 튜닝 스터디 - SQL 공유 및 재사용을 위해 라이브러리 캐시와 바인드 변수의 중요성을 알아보자!
I/O 튜닝이 곧 SQL 튜닝! I/O를 줄이고 버퍼캐시에 대해 알아보자
친절한 SQL 튜닝 스터디 - Single Block I/O vs Mulit Block I/O 의 차이와 Table Full Scan vs Index Range Scan 중 꼭 Index Scan이 좋은가! 마지막으로 캐시 탐색 메커니즘에 대해 알아보자!
인덱스 구조와 탐색 방법에 대해 알아보자! B*Tree와 인덱스 루트, 브랜치 블록, 리프 블록. 그리고 인덱스 수직적 탐색, 인덱스 수평적 탐색, 결합 인덱스 등
수직적 탐색과 수평적 탐색 그리고 B Tree의 탐색방법 - 주의 : 추가 공부 부분은 저의 개인적인 생각이 꽤나 첨가되어 있어서 정확하지 않을 수 있습니다. 그놈의 수직적 탐색과 수평적 탐색이 궁금해서 찾아보고 정리해봤습니다.
인덱스 기본 사용법과 인덱스가 정상적으로 사용되지 않는 케이스들에 대해 다뤄보자.
인덱스 확장기능 사용법을 알고 각 Index Scan에 대해 알아보자
ROWID를 이용한 테이블 액세스는 왜 고비용 구조인가? 그리고 인덱스 클러스터링 팩터, 인덱스 손익분기점, 온라인 프로그램 튜닝과 배치 프로그램 튜닝에 대해 알아보자
많은 양의 데이터를 조회해도 즉각적으로 결과를 얻을 수 있는 부분범위 처리에 대해 알아보고, 부분범위 처리에 관련한 성능 개선에 대해 알아보자
인덱스 탐색, 인덱스 스캔 효율성, 액세스 조건과 필터 조건 등 인덱스 스캔 효율화에 대해 알아보자
인덱스 설계가 어려운 이유 / 스캔 효율성 이외의 판단 기준 / 공식을 초월한 전략적 설계 / 소트 연산을 생략하기 위한 컬럼 추가 / 결합 인덱스 선택도 / 인덱스 설계도 작성
조인은 기본은 NL조인이다. NL조인은 인덱스를 이용한 조인이다. 소트 머지 조인, 해시 조인도 NL조인과 프로세싱 과정은 다르지 않다.
소트 머지 조인은 두 단계로 진행한다. - 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬 - 머지 단계 : 정렬한 양쪽 집합을 서로 머지 함. 소트 머지 조인은 Sort Area에 미리 정렬해둔 자료구조를 사용하는 것 외 NL조인과 같다.
해시 조인이 빠른 이유는 - Hash Area에 생성한 테이블을 이용, 조인 프로세싱은 NL조인과 같음. 소트 머지 조인처럼 해시 테이블을 PGA 영역에 할당함.
옵티마이저는 서브쿼리에 대해 다양한 형태로 쿼리 변환을 시도해서 쿼리 변환을 알아야 한다.
스칼라 서브쿼리로 조인하면 오라클은 조인 횟수를 최소화하려고 입력 값과 출력 값을 내부 캐시(Query Execution Cashe)에 저장함
SQL 수행 도중 가공된 데이터 집합이 필요할때, 오라클은 PGA나 Temp Tablespace를 사용. 그 대표적인 예가 소트머지 조인, 해시조인, 데이터 소트와 그룹핑이다. 소트는 기본적으로 PGA에 할당된 Sort Area에서 이루어짐.
성능을 위해서 Union All을 주로 사용하자. Union : 옵티마이저는 상단과 하단 두 집합간 중복을 제거하려고 소트 작업을 수행한다. / Union All : 중복을 확인하지 않고 두 집합을 단순히 결합하므로 소트 작업을 수행하지 않는다.
소트 연산을 생략하면 실행계획에서 Sort Order By를 생략. 이 원리를 활용하면 소트해야 할 대상 레코드가 무수히 많은 상황에서 극적인 성능 개선 효과를 낼 수 있다.
소트 연산이 불가피 할 경우, 메모리 내에서 처리 완료해야 한다
DML 성능에 영향을 미치는 요소 : 인덱스, 무결성 제약, 조건절, 서브쿼리, Redo 로, Undo 로깅, Lock, 커밋
Direct Path I/O : 대량의 데이터를 읽고 쓰는데 버퍼캐시를 탐색하면 더 안좋은 이유
파티션을 쓰면 대량 추가 변경 삭제 작업을 빠르게 처리할 수 있다. 파티셔닝은 테이블 또는 인덱스 데이터를 특정 컬럼 값에 따라 별도 세그먼트에 나눠서 저장하는 것이다.
Lock은 데이터베이스의 특징을 결정짓는 가장 핵심적인 매커니즘. 자신이 쓰는 DB의 고유 Lock 매커니즘을 이해하지 못하면, 고품질, 고성능 애플리케이션을 구축하기 어렵다.
선택도란, 전체 레코드 중에서 조건절에 의해 선택되는 레코드 비율을 말함. 가장 단순한 조건으로 검색할 때의 선택도만 살펴보면, 컬럼 값 종류 갯수를 이용해 아래와 같이 구한다. 선택도 = 1 / NDV카디널리
비용기반(Cost-Based) 옵티마이저 (CBO)와 규칙기반(Rule-Based) 옵티마이저 (RBO)