분포도가 좋지 않은 컬럼 대상의 새로운 인덱스 구조를 이용한 질의 성능 향상 방안 연구
A study on improving performance of query using a new index structure for low cardinality columns
- 주제(키워드) bitmap index , OLTP
- 발행기관 정보 통신 대학원
- 지도교수 박석
- 발행년도 2009
- 학위수여년월 2009. 2
- 학위명 석사
- 실제URI http://www.dcollection.net/handler/sogang/000000044817
- 본문언어 한국어
초록/요약
현재의 데이터베이스 환경은 점차 대용량화 되어가고 있으며 업무의 다변화로 인하여 보다 다양하고 복잡한 작업을 계속적으로 필요로 하고 있다. 이미 많은 조직에서 DW 환경을 구축하였거나 구축하고 있는 중이지만 일반적인 OLTP 환경의 데이터베이스 역시 계속 대용량화되어가고 있으며 OLTP 환경에서의 집계 또는 통계작업 또한 빈번히 발생하고 있는 상황이다. 일반적인 운영환경의 대용량 테이블에서 업무적으로 중요하지만 분포도가 극히 좋지 않은 컬럼들의 사용은 많은 경우 성능상의 병목구간이 되어 지고 있다. 쿼리의 성능향상을 위하여 인덱스를 사용할 수 있지만 이러한 인덱스는 구조적으로 그 사용이 목적에 따라 제한되어지는 특징을 가지고 있다. 인덱스는 물리적인 구조면에서 크게 B*Tree Index와 Bitmap Index로 구분할 수 있고 일반적인 OLTP 환경에서는 B*Tree Index가 OLAP 환경에서는 Bitmap Index가 주로 사용되어 지고 있으며 B*Tree Index는 분포도가 좋은 컬럼에서, Bitmap Index는 분포도가 좋지 않은 컬럼에서 더욱 뛰어난 성능을 보이는 것으로 알려져 있다. OLTP 환경에서의 Bitmap Index는 Block Level Locking과 압축해제 후 재 압축과 같은 시스템의 부하 등의 이유로 사용될 수 없다. 따라서 OLTP 환경에서 분포도가 좋지 않은 컬럼을 위한 새로운 방안의 도입이 필요한 상황이다. 이에 본 논문에서는 이러한 Bitmap Index의 단점을 제거하고 비교적 적은 비용으로 구현 가능한 새로운 Low-Card Index Structure 객체를 소개하고 이를 기존의 Bitmap Index와 비교 평가하여 그 사용의 타당성을 보이고자 한다. DBMS 독립적으로 구현 가능한 Low-Card Index Structure 객체의 사용은 OLTP 환경에서 분포도가 좋지 않은 컬럼에서의 쿼리 성능 향상을 위하여 기존의 Bitmap Index를 대체할 수 있는 새로운 방법이 될 것이다.
more초록/요약
Nowadays general database environment becomes larger in its volumes, and, because of the variety of the business processes, is reqired to do complex and continuous tasks. While many business enterprises have already been built or are building DW(Data warehousing) environment, the volume also become larger for the general OLTP database environment, and tasks such as aggregation or statistics are frequently needed in OLTP environment. In general operating environment, Using columns from tables with large volume which is important in business but not adequately dispersed usually makes bottlenecks against the overall performance. We can use some indexes for enhancing the performance of executing queries, but these indexes also have some limitations by the purpose of using them. Index is widely divided into two indexes (B*Tree Index and BitMap Index), and B*Tree Index is generally used in general OLTP environment, whereas Bitmap Index is primarily used in OLAP environment. B*Tree Index makes better performance by using columns which has high cardinality, while Bitmap Index do by using the ones which has low cardinality. Bitmap Index in OLTP environment cannot be used because of the system overload such as block level locking and recompressing data after uncompressing them. Therefore, we need new method for dealing with these data with bad frequency distribution in OLTP environment. In this theses, I'd like to introduce new Low-Card Index Structures Object which removes these weaknesses of using Bitmap Index and can be built for lower costs, and express the feasibility for using this one by comparing the existing Bitmap Index. Using Low-Card Index Structure Object that can be built in DBMS-independent environment can be the new method to substitute the existing Bitmap Index for enhancing the performance to do queries from the columns with bad frequency distribution in OLTP environment.
more목차
제1장 서론 = 8
1절 문제제기 및 연구 배경 = 8
제2장 오라클 데이터베이스의 Bitmap Index 와 분포도 = 11
1절 오라클의 Bitmap Index = 11
2절 OLTP 환경에서의 Index 별 성능 비교 연구 = 14
3절 Bitmap 인덱스의 단점 및 새로운 해결방안의 필요성 = 18
4절 새로운 해결방안의 개요 = 20
제3장 Bitmap Index의 단점을 보완한 새로운 Low-Card Index Structure의 구조 및 활용 방안 = 21
1절 Low-Card Index Structure의 기본 개념 = 21
2절 Low-Card Index Structure 객체의 목적 및 특성 = 25
1. Low-Card Index Structure 객체의 적용 = 25
2. Low-Card Index Structure의 생성 방안 = 27
3. Low-Card Index Structure 객체 생성 예 = 29
3절 Low-Card Index Structure의 구현 방안 = 33
1. 데이터베이스 내의 새로운 객체로 Low-Card Index Structure를 유지하는 방안 = 33
2. 어플리케이션과 데이터베이스 사이 중간 단계의 Middleware단에서 Low-Card Index Structure를 유지하는 방안 = 34
3. DB 내에 Low-Card Index Structure를 유지하고 Client에서 참조하여 운영하는 방안 = 34
4절 Low-Card Index Structure의 도입 및 활용 방안 = 35
제4장 실험 환경 구축 및 성능 비교 연구 = 38
1절 실험의 목적 = 38
2절 실험 환경 구축 및 각 단계별 구현 = 39
1. 대상 테이블 구축 및 샘플 데이터 생성 = 39
2. 대상 컬럼 선정 = 41
3. Low-Card Index Structure 객체 구현 = 42
4. Base Table의 변경을 Low-Card Index Structure 객체에 적용하기 위한 동기화 적용을 위한 Trigger 구현 = 44
5. 비교 실험을 위하여 선정된 컬럼에 Bitmap Index 생성 및 통계 정보 생성 = 48
3절 Bitmap Index와 Locking = 48
4절 종류별 쿼리 수행을 통한 성능비교 실험 수행 = 54
1. 서로 다른 조건을 가진 미리 정해진 SELECT, UPDATE, DELETE 문장에 대하여 다음 경우에서의 성능 비교 실험 = 55
2. 성능 비교 사항 = 56
3. 실험에 사용되어지는 쿼리 = 57
4. 테스트 케이스 정리 = 58
5절 실험 결과 및 분석 = 59
1. 쿼리 실행 시간 분석 = 59
2. Explain Plan 값을 기준으로 살펴 본 쿼리 실행 비용분석 = 61
3. 오라클 튜닝 도구 TKPROF를 이용한 각 Case 별 성능 비교 = 62
6절 분석 및 평가 = 63
제5장 결론 및 추후 연구과제 = 65
결론, 그리고 이어지는 내용들 = 65
[참고문헌] = 67
표목차
[표 2-1] Bitmap Index 내부 구조 = 12
[표 2-2] 사전 성능 테스트 테이블(TestTab) 구조 = 15
[표 2-3] 사전 성능 테스트 케이스 = 15
[표 2-4] 테스트 케이스별 실험 결과 = 16
[표 3-1] Low-Card Index Structure의 기본 구조-2 = 22
[표 3-2] Low-Card Index Structure의 기본 구조-3 = 23
[표 3-3] 통합된 Low-Card Index Structure = 24
[표 3-4] Low-Card Index Structure의 장점 = 25
[표 3-5] Bitmap Index와 B*Tree Index의 분류 = 26
[표 3-6] Bitmap Index와 Low-Card Index Structure의 비교 = 27
[표 3-7] Low-Card Index Structure 객체의 생성 과정 = 29
[표 3-8] 구현 및 실험을 위한 각 단계 정리 = 37
[표 4-1] Member Table 구조 = 40
[표 4-2] Low-Card Index Structure 대상 컬럼 = 42
[표 4-3] Lock Type = 51
[표 4-4] Lock Mode = 52
[표 4-5] 실험 환경 요약 = 55
[표 4-6] 실험용 쿼리 정리 = 57
[표 4-7] 테스트 케이스 = 59
[표 4-8] 쿼리 실행 시간 분석 = 59
[표 4-9] 쿼리 실행 비용 분석(Explain Plan 비용 값 기준) = 61
[표 4-10] 쿼리 처리 분석(TKPROF 결과 값 기준) = 62
그림목차
[그림 2-1] 인덱스 구조 = 11
[그림 2-2] Bitmap Index의 데이터 구조 = 13
[그림 3-1] Low-Card Index Structure의 기본 구조-1 = 21
[그림 4-1] 생성된 테이블 및 데이터 = 41
[그림 4-2] 통합된 Low-Card Index Structure 객체 = 43
[그림 4-3] 생성된 Low-Card Index Structure 객체 확인 = 43
[그림 4-4] Delete Trigger의 동작 = 45
[그림 4-5] Insert Trigger의 동작 = 46
[그림 4-6] Update Trigger의 동작 = 47
[그림 4-7] Bitmap 인덱스 컬럼의 변경 = 49
[그림 4-8] Bitmap Index로 인한 Lock 발생 확인 = 50
[그림 4-9] 발생한 Lock 확인 = 51
[그림 4-10] 잠금 해제 = 53
[그림 4-11] Blocking 현상 해제 = 54
[그림 4-12] 각 쿼리별 실행시간 분석 = 60
[그림 4-13] 각 쿼리 별 실행비용 분석 = 61

