목차 일부
머리말 ... 16
용어 대역표 ... 19
제1장 애플리케이션 구축을 위한 올바른 접근법
중요한 것은 팀 노력이다 ... 38
DBA와 개발자 역할 ... 40
문서를 읽어라 ... 44
가이드에 대한 안내 ... 44
독서 로드 맵 ... 48
블랙박스 증후군을 피하라 ... 50
데이터베이스 ...
더보기
목차 전체
머리말 ... 16
용어 대역표 ... 19
제1장 애플리케이션 구축을 위한 올바른 접근법
중요한 것은 팀 노력이다 ... 38
DBA와 개발자 역할 ... 40
문서를 읽어라 ... 44
가이드에 대한 안내 ... 44
독서 로드 맵 ... 48
블랙박스 증후군을 피하라 ... 50
데이터베이스 독립 대 데이터베이스 종속 ... 51
블랙박스 증후군의 위험 ... 52
이것은 데이터베이스이지, 데이터 더미가 아니다 ... 66
기본 키와 외래 키를 사용하라 ... 66
참조 무결성의 오버헤드를 테스트하라 ... 67
중간 계층의 검사가 만병 통치약은 아니다 ... 70
테스트 환경을 구축하라 ... 74
대표 데이터로 테스트하라 ... 75
단일 사용자 환경에서 테스트하지 말라 ... 75
먼지가 없는 연구실에서 테스트하지 말라 ... 80
성능 향상을 위해서는 튜닝하지 말고 디자인하라 ... 81
일반적인 데이터 모델을 사용하지 말라 ... 81
효율성을 염두에 두고 데이터 모델을 디자인하라 ... 85
처음부터 성능 목표를 정의하라 ... 89
구체적이고 명확한 메트릭에 따라 작업하라 ... 91
장기간에 걸쳐 메트릭을 수집하고 기록하라 ... 91
'모두가 내 임무로 알고 있다'는 이유 때문에 그래서는 안 된다 ... 92
벤치마크, 벤치마크, 벤치마크 ... 94
소규모 벤치마킹 ... 95
대규모 벤치마킹 ... 99
시스템에 코드를 삽입하라 ... 102
asktom.oracle.com에 나타난 추적 ... 103
원격 디버깅을 위한 코드 삽입 ... 105
아무 곳에나 DBMS_APPLICATION_INFO를 사용하라 ... 106
PL/SQL에 DEBUG.F를 사용하라 ... 108
애플리케이션에 SQL_TRACE를 사용하라 ... 109
산업 표준 API를 사용하라 ... 111
자신만의 루틴을 작성하라 ... 112
감사는 욕이 아니다 ... 112
권위에 도전하라 ... 113
보편적인 최선책을 조심하라 ... 114
비율과 기타 신화를 의심하라 ... 115
지름길을 찾지 말라 ... 118
단순화하라 ... 120
대안을 고려하라 ... 120
데이터베이스가 최선을 다하도록 내버려두자 ... 122
제공된 기능을 사용하라 ... 125
기능 X가 느리다고 들었다 ... 126
기능 X가 복잡하다는 얘기를 들었다 ... 129
하고 싶지 않다 ... 130
몰랐다 ... 132
데이터베이스 독립이 필요하다 ... 132
요약 ... 135
제2장 성능 틀키트
SQL*Plus ... 139
SQL*Plus 설치 ... 140
SQL*Plus 환경의 정의 ... 141
문서를 읽자 ... 144
EXPLAIN PLAN ... 144
EXPLAIN PLAN 설치 ... 144
EXPLAIN PLAN을 사용하라 ... 146
쿼리 계획을 읽는 방법 ... 148
EXPLAIN PLAN의 함정 회피 ... 152
DBMS_XPLAN과 V$SQL_PLAN의 사용 ... 156
AUTOTRACE ... 158
AUTOTRACE 설치 ... 159
AUTOTRACE 사용 ... 159
AUTOTRACE의 출력.포맷 바꾸기 ... 160
AUTOTRACE 출력 이해하기 ... 162
AUTOTRACE 출력에서 무엇을 찾고 있는가? ... 164
TKPROF ... 192
TKPROF 활성화 ... 193
TKPROF 실행 ... 194
TKPROF 보고서 읽기 ... 196
대중을 위한 TKPROF ... 202
Runstats ... 210
Runstats 설치 ... 211
Runstats 사용 ... 216
Statspack ... 221
Statspack 설치 ... 221
Statspack 사용 ... 223
Statspack의 오용 ... 224
한눈에 보는 Statspack ... 225
DBMS_PROFILER ... 232
프로파일러를 사용하고자 하는 이유 ... 232
프로파일러 리소스 ... 235
JDeveloper(그리고 디버깅) ... 236
요약 ... 240
제3장 아키텍처와 관련된 결정
공유 서버 대 전용 서버 연결에 대한 이해 ... 242
전용 서버 연결은 어떻게 동작하는가? ... 243
공유 서버 연결은 어떻게 동작하는가? ... 246
공유 서버 연결에 대한 일반적인 오해 ... 250
전용 서버 대 공유 서버 요약 ... 252
클러스터링 이용 ... 253
RAC는 어떻게 동작하는가? ... 254
RAC의 이점은 무엇인가? ... 260
클러스터링 요약 ... 261
파티셔닝 이용 시기 ... 262
파티셔닝 개념 ... 263
파티셔닝 신화 ... 265
왜 파티셔닝을 사용하는가? ... 271
파티셔닝 요약 ... 274
병렬 작업을 사용할 시기 알기 ... 275
병렬 신화 ... 276
병렬 관리 ... 280
병렬 쿼리 ... 282
병렬 DML ... 285
DIY 병렬 처리 ... 286
병렬 처리 요약 ... 289
요약 ... 290
제4장 효과적인 관리
SPFILE을 이용하여 데이터베이스 시작하기 ... 292
PFILE의 문제점 ... 292
SPFILE의 동작 방법 ... 293
SPFILE을 사용하도록 데이터베이스 바꾸기 ... 294
시스템 매개변수의 변경 내용 저장하기 ... 295
PFILE은 진부한가? ... 295
도와 주세요, 제 SPFILE이 손상되어 시작할 수 없습니다 ... 296
SPFILE 요약 ... 299
데이터 파일의 관리를 오라클에 맡기기 ... 300
언제 OMF가 유용한가? ... 301
OMF의 동작 방법 ... 302
OMF 요약 ... 304
복구의 방탄화 ... 305
백업 지침 ... 306
백업과 복구 요약 ... 310
지역적으로 관리되는 테이블 영역 사용하기 ... 311
왜 DMT가 진부한가? ... 312
객체가 얼마나 커질지 모르는 상황에서는 시스템에 의해 관리되는 LMT를 사용하라 ... 313
객체의 궁극적인 크기를 알고 있는 경우에는 획일적인 익스텐트 크기를 사용하라 ... 316
LMT에 관한 몇 가지 주의사항 ... 318
LMT와 DMT 요약 ... 324
세그먼트 공간 관리를 오라클에 맡기라 ... 325
사용 가능 목록과 사용 가능 목록 그룹에 대안 이해 ... 325
PCTFREE와 PCTUSED가 사용 가능 목록을 제어하는 방법 ... 331
ASSM의 경우 ... 333
ASSM 요약 ... 336
롤백 세그먼트 관리를 오라클에 맡기라 ... 336
UNDO_RETENTION 설정 ... 337
UNDO 테이블 영역에 대한 주의사항 ... 340
UNDO 테이블 영역 요약 ... 342
요약 ... 342
제5장 문 처리
SQL 문의 유형에 대한 이해 ... 346
문은 어떻게 실행되는가? ... 347
파싱 ... 347
최적화와 행-원본 생성 ... 355
실행 ... 357
문 실행 요약 ... 359
쿼리의 시작과 끝 ... 360
신속히 반환하는 쿼리 ... 360
늦게 반환하는 쿼리 ... 362
일관된 읽기 ... 365
수정 DML의 시작과 끝 ... 369
DDL 처리 ... 371
바인드 변수의 사용 ... 373
바인드 변수를 사용하면 무엇이 좋은가? ... 375
자바와 VB에서 바인드 변수 사용하기 ... 386
모든 규칙에는 예외가 있다 ... 392
바인드 변수 조사 ... 397
가능한 한 적게 파싱하기 ... 402
파싱 비용 ... 403
PL/SQL을 사용한 파스 줄이기 ... 407
트리거로부터 SQL을 옮겨 파싱 줄이기 ... 416
한 번의 파스와 여러 번의 실행 ... 420
요악 ... 421
제6장 비용 기반의 최적화기 활용 극대화
RBO가 사장된 이유 ... 425
CBO로 하여금 최선을 다 하도록 만들기 ... 428
OPTIMIZER_INDEX_CACHING과 OPTIMIZER_INDEX_COST_ADJ 매개변수 조정하기 ... 428
시스템 통계의 사용 ... 433
CBO 최적화하기 ... 444
업그레이드에 COMPATIBLE 설정하기 ... 444
전체 스캔의 비용을 줄이기 위하여 DB_FILE_MULTIBLOCK_READ_COUNT 설정하기 ... 445
HASH_JOIN_ENABLED를 설정하여 해시 조인 제어하기 ... 450
OPTIMIZER_DYNAMIC_SAMPLING을 설정하여 동적으로 통계 수집하기 ... 451
OPTIMIZER_FEATURES_ENABLE을 설정하여 기능 선택하기 ... 459
OPTIMIZER_MAX_PERMUTATIONS를 설정하여 순열 제어하기 ... 462
OPTIMIZER_MODE를 설정하여 모드 선택하기 ... 465
QUERY_REWRITE_ENABLED와 QUERY_REWRITE_INTEGRITY를 이용하여 쿼리 다시쓰기 ... 478
BITMAP_MERGE_AREA_SIZE, SORT_AREA_SIZE, 그리고 HASH_AREA_SIZE를 이용하여 PGA 메모리 제어하기 ... 486
스타 쿼리를 위해 STAR_TRANSFORMATION_ENABLED 사용하기 ... 491
최적화기에 영향을 미치는 기타 매개변수 설정하기 ... 492
10053 이벤트를 사용하여 CBO 선택 추적하기 ... 493
요약 ... 499
제7장 효과적인 스키마 디자인
스키마 디자인 기본 원칙 ... 502
데이터베이스에 데이터 무결성 시행 맡기기 ... 502
올바른 데이터 유형을 사용하라 ... 510
가장 빈번하게 요청되는 질문을 최적화하라 ... 515
테이블 종류 개요 ... 518
B*트리 인덱스 클러스터 테이블 ... 519
클러스터 생성하기 ... 521
클러스터 사용하기 ... 525
클러스터 요약 ... 539
인덱스 조직 테이블(IOT) ... 539
IOT를 연관 테이블에 대한 공간 절약 대안으로 사용하기 ... 540
IOT를 사용하여 무작위로 삽입되는 데이터를 한데 모으기 ... 542
IOT 요약 ... 546
외부 테이블 ... 547
외부 테이블 설정 ... 548
외부 테이블 수정하기 ... 552
직접 경로 적재에 외부 테이블 사용하기 ... 552
병렬 직접 경로 적재에 외부 테이블 사용하기 ... 555
병합에 외부 테이블 사용하기 ... 555
외부 테이블의 오류 처리하기 ... 557
인덱싱 테크닉 ... 559
FBI 사용하기 - 고정관념을 버려라 ... 560
도메인 인덱스 사용하기 ... 568
압축 ... 572
인덱스 키 압축 ... 573
읽기 전용/준읽기 전용 테이블에 테이블 압축 사용하기 ... 581
압축 요약 ... 593
요약 ... 593
제8장 효과적인 SQL
효율적인 SQL을 작성하는 데 필요한 것 ... 597
액세스 경로 이해하기 ... 598
전체 스캔 ... 598
ROWID 액세스 ... 607
인덱스 스캔 ... 609
클러스터 스캔 ... 620
조인에 대한 이해 ... 620
중첩된 루프 ... 621
해시 조인 ... 624
정렬 병합 조인 ... 628
데카르트 조인 ... 631
반 조인 ... 634
전체 외부 조인 ... 640
(물리적인) 스키마 문제 ... 643
SQL 바로 알기 ... 647
ROWNUM 유사 열 ... 650
스칼라 하위 쿼리 ... 668
해석 함수 ... 680
쿼리를 튜닝하지 말라 ... 705
질문 이해하기 ... 705
개념 증명 예 ... 707
기타 SQL 테크닉 개요 ... 711
요약 ... 712
제9장 효과적인 PL/SQL 프로그래밍
왜 PL/SQL인가? ... 716
PL/SQL은 가장 효율적인 데이터 조작 언어이다 ... 717
PL/SQL은 이식 및 재사용이 가능하다 ... 719
가능한 한 적게 작성하라 ... 721
절차적으로 수행하지 않기 ... 725
화면에 코드를 맞춰라 ... 727
패키지를 사용하라 ... 727
패키지의 이점 ... 727
종속성 체인 끊기 ... 728
패키지 요약 ... 735
정적 SQL을 사용하라 ... 735
정적 SQL의 이점 ... 735
동적 SQL을 대체할 기회를 찾아라 ... 736
정적 SQL 요약 ... 739
대량 처리 ... 740
효과가 클 때는 대량 처리를 사용하라 ... 740
ETL 작업에 대량 처리를 사용하라 ... 743
대량 처리 요약 ... 750
데이터 반환하기 ... 750
참조 커서의 이점 ... 750
참조 커서를 이용하여 결과 집합을 반환하라 ... 751
%TYPE과 %ROWTYPE을 사용하라 ... 757
레코드 유형의 기반을 테이블에 두기 ... 758
레코드 유형의 기반을 커서에 두기 ... 761
데이터 유형의 기반을 열에 두기 ... 765
호출자 권한 이용하기 ... 767
호출자 권한과 다중 스키마 ... 768
호출자 권한 루틴의 조건 ... 769
조회 작업을 효율적으로 수행하라 ... 771
조회를 위한 단일 행 인출 ... 774
조회를 위한 대량 처리 ... 777
조회를 위한 단일 문 작업 ... 780
조회 요약 ... 781
자치 트랜잭션을 사용할 때 주의하기 ... 782
자치 트랜잭션의 조건 ... 782
자치 트랜잭션은 데이터 무결성에 영향을 끼칠 수 있다 ... 783
암시적 혹은 명시적 커서를 사용할지 선택하라 ... 786
단일 행 선택을 위해 암시적 커서 사용하기 ... 786
제한된 수의 행을 가진 결과 집합에 암시적 커서 사용하기 ... 794
암시적/명시적 커서 요약 ... 796
요약 ... 796
제10장 그렇게 사고를 만났다
무엇이 다른지를 찾는다 ... 800
오늘부터 내력을 수집하라 ... 804
탐정 작업 ... 805
한 번에 한 가지만 변경한다 ... 807
이 한 가지를 변경하는 데는 충분한 근거가 있어야 한다 ... 808
목표를 설정하라 ... 809
가설을 검증하라 ... 809
변화를 되돌릴 수 있어야 한다 ... 812
테스트 사례를 작성한다 ... 813
테스트 사례 요구 사항 ... 814
가능한 한 테스트 사례를 작게 유지하라 ... 814
요약 ... 817
부록 : 설치와 몇 가지 스크립트
BIG_TABLE 설정하기 ... 820
자주 사용되는 스크립트 ... 822
PRINT_TABLE ... 823
SHOW_SPACE ... 826
COLS_AS_ROWS ... 831
GEN_DATA ... 840
찾아보기 ... 843
더보기 닫기