서브메뉴

본문

비용기반의 오라클 원리
비용기반의 오라클 원리
저자 : Jonathan Lewis
출판사 : 지앤선(지선)
출판년 : 2008
정가 : 28000, ISBN : 9788955508734

책소개


진정한 SQL 튜닝 전문가는 스스로 튜닝을 잘하기보다, 먼저 옵티마이저가 그 능력을 최대한 발휘할 수 있도록 환경을 조성해 줄 수 있어야 한다.

이 책은 오라클 데이터베이스의 두뇌에 해당하는 비용기반 옵티마이저의 핵심적인 원리를 예제를 통해 명쾌하게 설명함으로써 SQL 사용자가 깊은 이해를 바탕으로 SQL을 최적화할 수 있게 도움을 준다.

이 책은 다음과 같은 주제에 대한 메커니즘, 비용 계산 원리, 업그레이드 이슈 등을 다룬다.

-테이블스캔
-간단한 테이블 선택도
-단순한 B-tree 인덱스 액세스
-클러스터링 팩터
-선택도 이슈
-히스토그램
-비트맵 인덱스
-쿼리 변형
-조인 카디널리티
-NL(Nested loop) 조인
-해시(Hash) 조인
-정렬 및 머지(Sort Merge) 조인
-10053 트레이스
-9i, 10g 업그레이드 이슈

목차


CHAPTER 1. 비용(COST)이란?
옵티마이저 옵션 1
비용(COST)의 의미 3
쿼리 변환과 비용 계산 6
위지위그 9
요약 10
테스트 스크립트 10
CHAPTER 2. 테이블 스캔
시작하면서 12
지속적인 개선 17
블록 크기의 효과 18
CPU costing 20
CPU costing의 위력 28
BCHR은 죽었다! BCHR은 영원하다! 31
병렬 실행 35
Index Fast Full Scan 38
파티셔닝 42
요약 48
테스트 스크립트 49
CHAPTER 3. 단일 테이블 선택도
시작하면서 51
NULL 값 처리 54
IN-LIST 처리방식 56
10g 업데이트 61
범위 기반 검색조건 62
10g 업데이트 67
조건절이 두 개일 때의 처리방식 68
다중 조건일 때의 문제점 71
요약 74
테스트 스크립트 75
CHAPTER 4. 단순 B-tree 액세스
기본적인 인덱스 비용 계산식 77
시작하면서 80
유효 인덱스 선택도 83
유효 테이블 선택도 84
클러스터링 팩터 85
인덱스 액세스 비용에 대한 종합적인 검토 87
알고리즘의 확장 89
세 가지 선택도 98
CPU costing 103
끝으로 106
요약 107
테스트 스크립트 108

CHAPTER 5. 클러스터링 팩터
기준 예제 110
테이블 경합 줄이기(다중 freelist) 113
leaf 블록 경합 줄이기(reverse key 인덱스) 117
테이블 경합 줄이기(ASSM) 120
RAC에서 경합 줄이기(Freelist Groups) 123
인덱스 컬럼 순서 126
인덱스 컬럼 추가 129
통계정보 바로잡기 132
sys_op_countchg( ) 테크닉 132
비공식 전략 138
끝으로 139
요약 139
테스트 스크립트 140
CHAPTER 6. 선택도 이슈
여러 가지 데이터 타입 142
날짜 값 142
문자열 값 143
부적절한 데이터 타입 145
‘0’으로 문자 앞쪽을 채울 때의 문제점(leading zeros) 150
치명적인 문제를 유발하는 디폴트 값 152
이산(discrete) 값의 위험성 154
10g 업데이트 159
놀라운 sysdate 159
함수의 특성 162
상관관계에 있는 컬럼 164
동적 샘플링 167
옵티마이저 프로파일 170
이행적 폐쇄 172
제약이 만든 조건 176
요약 180
테스트 스크립트 181
CHAPTER 7. 히스토그램
시작하면서 183
일반적인 히스토그램 190
히스토그램과 바인드 변수 191
오라클은 언제 히스토그램을 무시하는가? 193
도수분포 히스토그램 197
도수분포 히스토그램 조작하기 201
통계정보 조작 시 주의사항 202
높이균형 히스토그램 204
계산208
데이터 문제 다시 생각하기 212
부적절한 데이터 타입 212
위험한 디폴트 값 216
요약 218
테스트 스크립트 219
CHAPTER 8. 비트맵 인덱스
시작하면서 222
인덱스 컴포넌트 227
테이블 컴포넌트 229
비트맵 결합 231
낮은 카디널리티 234
NULL 컬럼 238
CPU costing 242
재미있는 사례들 244
다중 컬럼 인덱스 244
비트맵 변환 247
요약 250
테스트 스크립트 251

CHAPTER 9. 쿼리 변환
시작하면서 254
진화(Evolution) 258
필터링 258
필터 최적화(Filter Optimization) 263
스칼라 서브쿼리 266
서브쿼리 팩토링 274
Complex View Merging 281
Pushing Predicates 284
일반적인 서브쿼리 286
서브쿼리 파라미터 289
서브쿼리의 분류 290
세미 조인(Semi Joins) 298
안티 조인 301
안티 조인의 이상 현상 304
NULL과 NOT IN 305
Ordered 힌트 307
스타 변환 조인 309
스타 조인 317
향후 전망 319
요약 322
테스트 스크립트 323
CHAPTER 10. 조인 카디널리티
조인 카디널리티 기본 326
한 쪽에만 필터조건을 적용한 경우 331
실환경에서의 조인 카디널리티 334
확장과 예외 338
범위조건에 의한 조인 338
부등호 조인 340
조인하는 두 집합이 완전히 겹치지 않는 경우 343
히스토그램 345
이행적 폐쇄 349
세 개 이상 테이블을 조인할 경우 356
조인 컬럼에 Null 값을 갖는 경우 360
구현 이슈 364
골치 아픈 사항들 370
어이없는 버그 374
다른 관점에서의 접근 376
요약 378
테스트 스크립트 379
CHAPTER 11. NL(Nested Loops) 조인
기본 메커니즘 381
실사례 388
Sanity Checks 390
요약 396
테스트 스크립트 396
CHAPTER 12. 해시 조인
시작하면서 398
Optimal 해시 조인 403
Onepass 해시 조인 405
Multipass 해시 조인 412
트레이스 파일 417
10104 이벤트 417
10053 이벤트 419
골칫거리 421
전통적인 비용계산법 421
새로운 비용계산법 422
비교 테스트 422
다중 테이블 해시 조인 430
요약 433
테스트 스크립트 434
CHAPTER 13. 정렬과 머지 조인
시작하면서 438
메모리 사용 444
CPU 사용 446
sort_area_retained_size 450
pga_aggregate_target 452
실제 I/O 455
정렬 비용 458
10053 트레이스 458
비교 테스트 463
머지 조인 468
머지 메커니즘 468
첫 번째 집합을 정렬할 필요가 없는 머지 조인 474
카테지안 머지 조인 475
집계 478
인덱스 484
집합 연산자 485
마지막 당부 491
요약 493
테스트 스크립트 494
CHAPTER 14. 10053 트레이스 파일
쿼리문 496
실행계획 498
환경 499
트레이스 파일 501
파라미터 설정값 501
쿼리 블록 505
통계 정보 506
단일 테이블 508
Sanity Checks 510
General Plans 511
Join order[1] 512
Join order[2] 519
Join order[3] 521
Join order[4] 521
Join order[5] 522
Join order[6] 526
Join order[7] 526
Join order[8] 530
Join order[9] 532
Join order[10] 533
Join order[11] 533
Join order[12] 537
Join order[13] 539
Join order[14] 541
Join order[15] 542
Join order[16] 543
Join order[17] 543
Join order[18] 546
조인 평가 요약 548
테스트 스크립트 550
APPENDIX A 업그레이드 시 주의사항
dbms_stats 552
도수분포 히스토그램 553
CPU costing 554
반올림 오차 554
바인드 변수 Peeking 555
조인 컬럼에 NULL 값을 갖는 경우 556
B-tree에서 비트맵으로 전환 556
Index Skip-Scans 557
AND-Equal 557
인덱스 해시 조인 558
In-List 조건에 대한 비용계산의 개선 558
이행적 폐쇄 559
sysdate 계산식의 개선 560
구성 컬럼이 모두 NULL인 인덱스 엔트리 포함 561
pga_aggregate_target 561
정렬(Sorting) 562
그룹핑(Grouping) 563
Sanity Checks 563
조건식이 컬럼 한계 값을 벗어나는 경우 563
데이터 타입 조작 564
옵티마이저 모드 564
역순정렬 인덱스 565
Complex View Merging 565
Unnest 서브쿼리 565
스칼라 및 필터 서브쿼리 566
병렬 쿼리의 변화 x 2 566
동적 샘플링 567
임시 테이블 567
딕셔너리 통계정보 568
APPENDIX B 옵티마이저 파라미터
optimizer_features_enable 570
10053 트레이스 파일 572
v$sql_optimizer_env 577
인덱스579