이미지 검색을 사용해 보세요
검색창 이전화면 이전화면
최근 검색어
인기 검색어

소득공제
비용기반의 오라클 원리
베스트
IT 모바일 top100 8주
가격
28,000
10 25,200
YES포인트?
280원 (1%)
5만원 이상 구매 시 2천원 추가 적립
결제혜택
카드/간편결제 혜택을 확인하세요

이미 소장하고 있다면 판매해 보세요.

  •  해외배송 가능?
  •  문화비소득공제 가능

이 분야의 이벤트

이 상품의 시리즈 35

이 상품의 시리즈 알림신청
뷰타입 변경

책소개

목차

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

관련 분류

품목정보

발행일
2008년 03월 04일
쪽수, 무게, 크기
620쪽 | 1239g | 187*257*35mm
ISBN13
9788955508734

책 속으로

대부분의 상용 DBMS는 탄생 초기부터 비용기반 옵티마이저(CBO)를 채택하였다. 하지만, 역사가 좀더 오래된 오라클은 최근까지도 규칙기반 옵티마이저(RBO)와 비용기반 옵티마이저 모두를 지원해왔고, 비교적 경험이 많은 오라클 개발자일수록 규칙기반 옵티마이저에 더 익숙해져 있다. 10g로 오면서 규칙기반 옵티마이저는 이제 지원하지 않겠다고 선언한 오라클 사의 정책과 비용기반 옵티마이저의 지속적인 발전을 지켜보면서 그 둘 간의 비교는 논쟁할 가치조차 없을 것으로 생각할 수도 있다. 그러나 실제 여러 고객사를 다녀보면 표면적으로 잘 드러나지 않을 뿐 그 둘 간의 비교 논쟁은 여전히 첨예한 것을 쉽게 느낄 수 있다. 일례로 몇 년 전 DB 성능 진단을 위해 어떤 고객사를 방문했는데, 오브젝트 통계정보를 전혀 생성하지 않은 채 오라클 9i를 운영하는 것을 보고 무척 당황했던 경험이 있다. 게다가 최근 차세대 시스템을 구축하는 회사에서조차 오라클 CBO가 불안하다는 이유로 통계정보를 생성하지 않고 RBO로 운영할 계획이라고 해서 DBA를 설득하느라 진땀을 빼기도 했다.
물론, DBA의 그런 주장을 이해 못 하는 바는 아니다. 잘 돌아가던 프로그램이 갑자기 성능 문제를 일으키고, 그 원인이 SQL 실행계획이 바뀌어서 그런 것이라고 판명나는 순간, 따가운 비난의 화살이 우선 DBA에게로 날아오기 마련이고, 다시 DBA는 그 책임을 오라클 CBO에 물을 수밖에 없을 것이다. 역자의 경우 2007년 1월 2일 첫 출근하던 날, 새로 추가된 파티션 통계 이상으로 벽두부터 고생했던 터라 그 심정을 잘 이해한다. 그 시스템이 오라클 10g였는데, 이번에 출시된 11g에서는 확실히 안심해도 된다고 누가 감히 얘기할 수 있겠는가?
이제 RBO는 공식적으로 그 개선이 중단되었기 때문에 새로운 오라클 DBMS를 도입하는 상황이라면 CBO는 피해 갈 수 없는 숙명과도 같은 존재가 돼 버렸다. 피할 수 없다면 즐기라고 했던가? 이제는 CBO에 좀더 친숙해 지려는 노력만이 유일한 대안이다.
진정한 튜닝 전문가는 스스로 튜닝을 잘하기 이전에 옵티마이저가 그 능력을 최대한 발휘할 수 있도록 환경을 조성해 주는 조력자가 돼야 한다. 어떤 쿼리는 어떤 힌트를 사용하면 문제를 즉시 해결할 수 있다는 식의 접근 방법보다는 당장 100점은 아닐지라도, 옵티마이저가 평균 90점 수준으로 문제를 해결할 수 있도록 우선 환경을 조성하고(예를 들어, 적합한 옵티마이저 모드 설정과 유효한 통계정보 생성 등), 부족한 10%는 필요에 따라 사용자가 채울 수 있도록 하는 전략이 필요하다. 그러기 위해서 튜닝 전문가뿐만 아니라 사용자와 DBA 모두가 옵티마이저의 비용 계산 원리를 이해해야 한다. 잘못된 실행계획이 자꾸 만들어 질 때, 옵티마이저가 왜 그런 어처구니 없는 결정을 하게 되었는지를 이해하려고 노력해야 한다. 사용자와 관리자 모두가 옵티마이저에 대해 깊은 이해가 있을 때, 쿼리를 수정하거나 힌트를 사용해야 하는지, 아니면 옵티마이저 환경 변수만 바꾸면 되는지? 또는 통계정보를 재생성해야 하는지? 통계정보를 왜, 어떻게 관리해야 할지? 등과 같은 이슈에 대해 오해 없는 적합한 솔루션을 찾아낼 수 있을 것이다.
다행히도 수준 높은 SQL 사용자, DBA, 튜닝 전문가가 되고자 노력하는 분들께 이 책은 아주 좋은 나침반이 돼 줄 것이다. 다른 어떤 서적이나 자료와 비교되지 않을 정도로 이 책은 오라클 비용기반 옵티마이저를 체계적이면서도 깊이 다루었는데, 이 책을 저술한 조나단 루이스(Jonathan Lewis)의 통찰력과 탐구력은 참으로 존경할 만하다. 게다가 기본적인 내용을 담은 이 책이 끝이 아니라 2권, 3권을 계속 준비 중이라고 하니 희소식이 아닐 수 없다. 그 방대하고 심오한 옵티마이저의 세계를 어떻게 이 책 한 권에 담을 수 있었겠는가? 계속 발간될 후속편은 더 큰 기대를 담아 본다.

--- 역자일동

추천평

Arthur C. Clarke(역주 : 2001 A Space Odyssey의 저자)는 그의 저서에서 “상당히 진보된 모든 기술은 마술과 다름없다.” 라고 말했다. 나는 그런 그의 시각이 아주 정확하다고 믿는다. 그리고 혹자는 풍부한 지식을 가진 기술자는 마술사와 구분되지 않는다고 평했다. 그런 이야기가 맞다면, 지금 독자의 손에 놓인 것은 마술에 관한 책이나 마찬가지다.
그런데 나는 이 책의 필자, 조나단 루이스(Jonathan Lewis)를 알고 지낸 오랜 기간동안(구글을 통해 뉴스그룹의 오랜 문서들을 찾아보니 대략 11년쯤 된 것 같다), 그가 마술처럼 믿기 어려운 사실을 그대로 받아들이는 것을 본 적이 없다. 어떤 일이 왜 그런 식으로 일어나는지를 알고 싶어하는 그의 성격처럼 근본적으로 그의 책은 ‘이해’에 관한 것을 담고 있다.
이해하다
1. 본질과 의미를 인지하고 파악하다
2. 긴밀한 접촉 또는 오랜 경험으로 완전히 파악하다
더 정확히 이야기하면 이것은 오라클 비용기반 옵티마이저(CBO)가 어떻게 작동하고, 왜 그렇게 작동하는지에 대한 ‘이해’를 의미한다. 조나단은 오라클 CBO에 대해 그가 이해한 것을 사례와 예제를 통해 독자에게 전달하는데 이러한 이해, 이러한 지식을 바탕으로 문제 해결을 위한 새로운 선택과 해결책을 제시하는 것이 가능해진다.
간단히 말하면 오라클 CBO는 하나의 수학 모형이다. 사용자가 입력 데이터를 넣으면(쿼리, 통계정보), 옵티마이저는 출력 데이터(실행계획)를 만들어 낸다. CBO를 성공적으로 사용하기 위해 입력 데이터에는 어떠한 것이 있는지, CBO가 그것들을 어떻게 사용하는지를 이해하는 것이 중요하다. 본인이 몇 번이나 답변해야 했던 다음의 질문을 한번 보자. 통계 정보를 수집하기 위한 가장 좋은 방법은 무엇이고, 어떤 통계를 수집해야 하는가? 간단하고 매우 직관적인 답변이 가능해 보인다. 이런 질문에 대한 정답이 있어야 하고 실제로 존재하지만, 한 가지로 모든 경우를 충족시키는 그런 식의 정답은 없다. 시스템 환경, 데이터 분포, 쿼리, 총체적 요인으로서의 시스템 유형(OLTP 혹은 DW)에 따라 정답이 달라질 수 있다. 하지만, CBO가 어떻게 작동하는지, 여러 요소들이 CBO에 어떻게 영향을 미치는지 이해하게 될 때 비로소 독자 스스로 그와 같은 질문에 대한 정답을 얻을 수 있을 것이다.

이 책에서 개인적으로 가장 마음에 드는 부분은 7장이다. 7장에서는 히스토그램의 역할이 무엇인지, CBO가 그것을 어떻게 사용하는지, 그것과 관련한 몇 가지 근거 없는 미신(CBO의 입력데이터 중 하나인 히스토그램에 대해 많은 오해가 있다) 등과 같은 주제에 대해 훌륭한 설명을 제공한다. 개인적으로 7장을 선호하는 이유 중 하나는 세미나에서 처음 들은 그 내용을 아직까지 기억하고 있기 때문이다. 약 3년 전 NoCOUG (북부 캘리포니아 오라클 사용자 그룹) 모임에서 조나단의 ‘히스토그램’세션에 참석했는데, 이때 처음으로 오라클 히스토그램을 제대로 이해했다고 느꼈다. 조나단은 일상에서 사용할 수 있는 유용한 정보를 전해 주었고, 결과적으로 나는 어려운 질문에 대한 답변을 더 잘할 수 있게 되었다. 이 책을 보면 이런 식의 실전적이고 즉시 사용 가능한 방식을 통해 여러 주제가 설명된 것을 확인할 수 있다.
조나단이 주는 비용기반 옵티마이저의 작동에 대한 식견은, DBA는 더 나은 설계자로, 개발자는 더 나은 SQL 작성자로 성장하게 하여, 결국 두 그룹 모두 향상된 실력의 문제 해결자가 되도록 할 것이다. 또한 CBO가 수행하는 복잡한 일을 이해하기 쉽게하는 예제를 풍부하게 실었다.
항상 보면, 어떤 도구가 있을 때 그것이 어떻게 작동하는지를 이해하고 나서야 그것을 안전하고 효과적으로 사용할 수 있음을 깨닫게 된다. 소프트웨어, 하드웨어, 그리고 일상의 다른 모든 것이 마찬가지이다. 그런 의미로 독자 여러분의 손에 놓여진 이 책은 오라클 CBO란 도구를 안전하고 효과적으로 사용할 수 있게 할 것이다.

Thomas Kyte
오라클 사(社), 공공 부문 부사장
오라클 사(社), 공공 부문 부사장

리뷰/한줄평3

리뷰

8.4 리뷰 총점

한줄평

첫번째 한줄평을 남겨주세요.