편집 요약 없음 |
|||
8번째 줄: | 8번째 줄: | ||
=== 1. Oracle 아키텍처 및 기본 개념 이해 === | === 1. Oracle 아키텍처 및 기본 개념 이해 === | ||
성능 튜닝은 데이터베이스가 어떻게 작동하는지 이해하는 것에서 시작됩니다. | 성능 튜닝은 데이터베이스가 어떻게 작동하는지 이해하는 것에서 시작됩니다. | ||
* '''Oracle 인스턴스 구조:''' | * '''[[Oracle 인스턴스]] 구조:''' | ||
* '''SGA (System Global Area):''' Shared Pool, Database Buffer Cache, Large Pool, Java Pool, Redo Log Buffer 등 각 구성 요소의 역할과 튜닝 파라미터. | * '''[[SGA (System Global Area)]]:''' Shared Pool, Database Buffer Cache, Large Pool, Java Pool, Redo Log Buffer 등 각 구성 요소의 역할과 튜닝 파라미터. | ||
* '''PGA (Program Global Area):''' 각 프로세스별 전용 메모리 영역. Work Area Size (Sort Area, Hash Area) 튜닝의 중요성. | * '''[[PGA (Program Global Area)]]:''' 각 프로세스별 전용 메모리 영역. Work Area Size (Sort Area, Hash Area) 튜닝의 중요성. | ||
* '''백그라운드 프로세스:''' PMON, SMON, DBWn, LGWR, CKPT, ARCH 등 주요 프로세스의 역할과 장애 처리 시 중요성. | * '''[[백그라운드 프로세스]]:''' PMON, SMON, DBWn, LGWR, CKPT, ARCH 등 주요 프로세스의 역할과 장애 처리 시 중요성. | ||
* '''물리적/논리적 구조:''' | * '''물리적/논리적 구조:''' | ||
* '''데이터 파일, 제어 파일, 리두 로그 파일:''' 각 파일의 역할 및 중요성, I/O 특성. | * '''데이터 파일, 제어 파일, 리두 로그 파일:''' 각 파일의 역할 및 중요성, I/O 특성. | ||
* '''테이블스페이스:''' 데이터 저장 방식, 관리 방법 (Locally Managed Tablespace). | * '''[[테이블스페이스]]:''' 데이터 저장 방식, 관리 방법 (Locally Managed Tablespace). | ||
* '''세그먼트, 익스텐트, 블록:''' 데이터가 저장되는 최소 단위와 관리 단위. 블록 크기 (DB_BLOCK_SIZE)의 영향. | * '''[[세그먼트]], [[익스텐트]], [[블록]]:''' 데이터가 저장되는 최소 단위와 관리 단위. 블록 크기 (DB_BLOCK_SIZE)의 영향. | ||
* '''동시성 제어 및 트랜잭션 관리:''' | * '''동시성 제어 및 트랜잭션 관리:''' | ||
* '''Lock 및 Latch:''' 다양한 락(Row Lock, Table Lock, Latch)의 종류와 경합(contention) 발생 시 해결 전략. | * '''[[Lock 및 Latch]]:''' 다양한 락(Row Lock, Table Lock, Latch)의 종류와 경합(contention) 발생 시 해결 전략. | ||
* '''Undo/Redo:''' 트랜잭션 무결성 및 복구 메커니즘. Undo 세그먼트의 역할과 스냅샷 너무 오래됨(ORA-01555) 오류 해결. | * '''[[Undo/Redo]]:''' 트랜잭션 무결성 및 복구 메커니즘. Undo 세그먼트의 역할과 스냅샷 너무 오래됨(ORA-01555) 오류 해결. | ||
* '''MVCC (Multi-Version Concurrency Control):''' 읽기 일관성(Read Consistency) 구현 방식. | * '''[[MVCC (Multi-Version Concurrency Control)]]:''' 읽기 일관성(Read Consistency) 구현 방식. | ||
=== 2. SQL 실행 계획 (Execution Plan) 분석 === | === 2. SQL 실행 계획 (Execution Plan) 분석 === |
2025년 7월 2일 (수) 20:51 판
Oracle SQL 튜닝 전문가를 위한 필수 항목
- Oracle SQL 튜닝을 전문가처럼 잘하기 위해서는 다양한 지식과 경험이 필요합니다.
- 단순히 SQL 문법을 아는 것을 넘어, 데이터베이스 내부 동작 방식, 운영 체제와의 상호 작용, 그리고 실제 업무 환경에서의 문제 해결 능력까지 갖춰야 합니다.
- Oracle SQL 튜닝은 단순히 느린 쿼리를 빠르게 만드는 것을 넘어, 데이터베이스 시스템 전체의 효율성을 극대화하는 과정입니다.
- 이를 위해서는 SQL 언어에 대한 깊은 이해는 물론, Oracle 데이터베이스의 내부 아키텍처, 성능 관련 도구 활용 능력, 그리고 실제 시나리오에 대한 분석 및 문제 해결 경험이 필수적입니다.
1. Oracle 아키텍처 및 기본 개념 이해
성능 튜닝은 데이터베이스가 어떻게 작동하는지 이해하는 것에서 시작됩니다.
* Oracle 인스턴스 구조: * SGA (System Global Area): Shared Pool, Database Buffer Cache, Large Pool, Java Pool, Redo Log Buffer 등 각 구성 요소의 역할과 튜닝 파라미터. * PGA (Program Global Area): 각 프로세스별 전용 메모리 영역. Work Area Size (Sort Area, Hash Area) 튜닝의 중요성. * 백그라운드 프로세스: PMON, SMON, DBWn, LGWR, CKPT, ARCH 등 주요 프로세스의 역할과 장애 처리 시 중요성. * 물리적/논리적 구조: * 데이터 파일, 제어 파일, 리두 로그 파일: 각 파일의 역할 및 중요성, I/O 특성. * 테이블스페이스: 데이터 저장 방식, 관리 방법 (Locally Managed Tablespace). * 세그먼트, 익스텐트, 블록: 데이터가 저장되는 최소 단위와 관리 단위. 블록 크기 (DB_BLOCK_SIZE)의 영향. * 동시성 제어 및 트랜잭션 관리: * Lock 및 Latch: 다양한 락(Row Lock, Table Lock, Latch)의 종류와 경합(contention) 발생 시 해결 전략. * Undo/Redo: 트랜잭션 무결성 및 복구 메커니즘. Undo 세그먼트의 역할과 스냅샷 너무 오래됨(ORA-01555) 오류 해결. * MVCC (Multi-Version Concurrency Control): 읽기 일관성(Read Consistency) 구현 방식.
2. SQL 실행 계획 (Execution Plan) 분석
SQL 튜닝의 핵심은 실행 계획을 정확하게 읽고 해석하는 능력입니다.
* 실행 계획 생성 방법: *EXPLAIN PLAN FOR
: 쿼리 실행 없이 계획만 확인. *AUTOTRACE
: 쿼리 실행 후 통계 정보와 함께 계획 확인. * DBMS_XPLAN 패키지:DISPLAY
,DISPLAY_AWR
,DISPLAY_CURSOR
등 다양한 함수를 활용한 계획 출력. * SQL*Plus, SQL Developer, DBeaver 등 도구 활용법. * 주요 실행 계획 연산자 (Operation) 이해: * Full Table Scan (FTS): 대량 데이터 조회 시의 장단점, Block I/O와 Multi-block Read. * Index Scan: Range Scan, Unique Scan, Full Scan, Fast Full Scan, Skip Scan 등 다양한 인덱스 스캔 방식과 조건부 사용. * Join 연산: Nested Loops (NL), Hash Join (HJ), Sort Merge Join (SMJ)의 작동 원리, 장단점 및 사용 시점. * Sort 연산: Order By, Group By, Distinct 등에서 발생하는 Sort의 비용. * Filter, Projection, View, Subquery 연산 등. * 실행 계획 통계 정보 해석: * Cost (비용): 옵티마이저가 예측한 자원 소모량. * Rows (예측 행 수): 옵티마이저 예측과 실제 결과 행 수 비교 (Cardinality Mismatch). * Bytes (예측 바이트 수): 처리될 데이터 크기. * A-Rows (Actual Rows): 실제 실행된 행 수. 예측 값과의 차이 분석. * Starts: 연산이 몇 번 실행되었는지. * E-Rows (Estimated Rows): 옵티마이저가 예상한 행 수. * Time (Actual Time): 실제 소요 시간.
3. 옵티마이저 (Optimizer) 이해 및 제어
Oracle 옵티마이저는 SQL 성능의 핵심입니다.
* 옵티마이저의 역할: * SQL 문을 가장 효율적인 실행 계획으로 변환하는 DBMS 구성 요소. * CBO (Cost-Based Optimizer)의 작동 원리. * 통계 정보 (Statistics): * 테이블/컬럼 통계:DBMS_STATS
패키지를 이용한 통계 수집 (GATHER_TABLE_STATS
). * 인덱스 통계: 인덱스의 효율성을 결정. * 시스템 통계: CPU 속도, I/O 특성 등. * 히스토그램: 데이터 분포가 편향된 컬럼에 대한 통계. * 통계 정보의 중요성 및 주기적인 갱신. * 옵티마이저 힌트 (Hints): * 용도: 옵티마이저의 기본 동작을 오버라이드하여 특정 실행 계획을 강제. * 주요 힌트:FULL
,INDEX
,USE_NL
,USE_HASH
,PARALLEL
,NO_PARALLEL
,DRIVING_SITE
등. * 힌트의 올바른 사용법과 남용의 위험성. * SQL 프로파일링 및 베이스라인: * SQL Profile: SQL 문의 성능을 개선하기 위해 옵티마이저가 사용하는 실행 계획을 영구적으로 저장하고 활용. * SQL Plan Baseline: 특정 SQL 문의 실행 계획을 고정하여 예상치 못한 성능 저하 방지. * SQL Patch: SQL 문을 수정하지 않고 힌트를 적용하는 방법.
4. 인덱스 (Index) 튜닝
인덱스는 SQL 성능 최적화의 가장 강력한 도구 중 하나입니다.
* 인덱스의 작동 원리:
* B-tree 인덱스 구조 및 검색 원리.
* 인덱스 생성 시 고려사항 (컬럼 순서, 카디널리티).
* 인덱스 유형 및 활용:
* 단일 컬럼 인덱스, 복합(Composite) 인덱스: 사용 시기와 장단점.
* 고유(Unique) 인덱스, 비고유(Non-Unique) 인덱스.
* 함수 기반 인덱스 (Function-Based Index): 함수 결과에 대한 인덱싱.
* 비트맵(Bitmap) 인덱스: 낮은 카디널리티 컬럼에 대한 효율적인 인덱싱.
* 도메인 인덱스 (Domain Index): 사용자 정의 데이터 타입 및 연산자에 대한 인덱싱.
* 파트너 인덱스 (Index Organized Table - IOT): 테이블 자체가 인덱스 구조로 저장.
* 인덱스 적용 전략:
* WHERE 절, ORDER BY, GROUP BY 절에서의 인덱스 활용.
* 인덱스를 타지 않는 경우 (컬럼 가공, LIKE %값, 부정형 연산자).
* 인덱스 재구성 (Rebuild) 및 인덱스 삭제 전략.
* 인덱스 모니터링 (V$OBJECT_USAGE
).
5. SQL 구문 튜닝 기법
잘 작성된 SQL 문은 옵티마이저가 최적의 계획을 세우는 데 도움을 줍니다.
* WHERE 절 최적화: * 인덱스 사용 유도. * OR 조건을 IN / UNION ALL로 분리. *NULL
값 처리. * 조인 (Join) 최적화: * 적절한 조인 방식 유도 (힌트 사용). * 서브쿼리 vs 조인 (Subquery Unnesting). * 조인 순서의 중요성 (Driving Table). * 집계 (Aggregation) 및 그룹화 (Grouping) 최적화: *GROUP BY
절 인덱스 활용. *ROLLUP
,CUBE
,GROUPING SETS
의 효율적 사용. * 서브쿼리 (Subquery) 최적화: * 상관관계 서브쿼리(Correlated Subquery)의 성능 저하 및 대체 방안 (조인, EXISTS, IN). * 뷰(View)의 성능 영향. * CTE (Common Table Expression /WITH
절)의 활용. * DML (INSERT, UPDATE, DELETE) 튜닝: * 벌크 작업 (FORALL
,BULK COLLECT
) 활용. * 대용량 데이터 변경 시 Locking 및 Undo 경합 해결. * 테이블 압축(Table Compression) 및 파티셔닝(Partitioning) 고려.
6. 데이터베이스 관리 및 시스템 튜닝
SQL 튜닝은 데이터베이스 인스턴스 전반의 환경과 밀접하게 관련됩니다.
* 메모리 튜닝: * SGA, PGA 파라미터 (SGA_TARGET
,PGA_AGGREGATE_TARGET
) 설정. * 각 메모리 영역의 사용량 모니터링 (VSGAINFO\</code\>, \<code\>VPGASTAT
). * I/O 튜닝: * 디스크 I/O 병목 현상 식별 (V$FILESTAT
,DBA_DATA_FILES
). * 파일 배치 및 RAID 구성. * Storage Area Network (SAN) 환경에서의 고려사항. * 네트워크 튜닝: * 클라이언트-서버 간 네트워크 지연(Latency) 최소화. * SQL Net TNS 설정. * 자원 관리 (Resource Manager): * 세션 간 자원(CPU, I/O) 할당 제어. * 경합 (Contention) 분석: * Lock 경합, Latch 경합, Buffer Busy Wait 등 주요 대기 이벤트(Wait Event) 분석. *VSESSION\_WAIT\</code\>, \<code\>VACTIVE_SESSION_HISTORY (ASH)
,DBA_HIST_ACTIVE_SESS_HISTORY
활용. * ASM (Automatic Storage Management): * Oracle의 통합 볼륨 관리 및 파일 시스템. * ASM 사용 시 I/O 성능 관리.
7. 성능 진단 및 모니터링 도구 활용
전문가는 다양한 도구를 능숙하게 사용하여 문제를 진단하고 해결합니다.
* Oracle 자체 제공 도구: * AWR (Automatic Workload Repository): 주기적인 성능 스냅샷 및 보고서 (AWR Report
). 주요 통계 및 대기 이벤트 분석. * ASH (Active Session History): 실시간 세션 활동 모니터링. 특정 시점의 병목 현상 분석. * ADDM (Automatic Database Diagnostic Monitor): AWR 데이터를 기반으로 자동 성능 진단 및 권고 사항 제공. * SQL Trace 및 TKPROF: 특정 세션의 모든 SQL 문과 실행 통계 추적 및 분석. * DBMS_MONITOR: SQL Trace, ASH 리포트 생성 등. * V$ 뷰 (Dynamic Performance Views):VSQL\</code\>, \<code\>VSQLAREA
,VSESSION\</code\>, \<code\>VSYSSTAT
,V$EVENT_NAME
등 주요 뷰 활용. * DBA_ 뷰 (Data Dictionary Views):DBA_TABLES
,DBA_INDEXES
,DBA_USERS
등 스키마 정보 확인. * 오픈 소스/상용 툴: * SQL Developer, DBeaver 등 GUI 기반 도구. * Ganglia, Prometheus/Grafana 등 시스템 모니터링 도구와의 통합.
8. 문제 해결 접근 방식 및 경험
실제 튜닝은 이론과 실전의 조합입니다.
* 튜닝 방법론: * Top-down 접근 방식 (시스템 전체 -> 인스턴스 -> 세션 -> SQL). * Wait Event 기반 튜닝. * 병목 현상 식별 (Identify Bottleneck). * 가설 설정 및 검증. * 변경 관리 및 효과 측정. * 실제 시나리오 학습: * 특정 쿼리가 느릴 때의 접근법. * CPU 사용률이 높을 때의 접근법. * I/O가 느릴 때의 접근법. * 락 경합이 발생할 때의 접근법. * 롤백 세그먼트 경합, Latch 경합 등 특정 대기 이벤트 발생 시 해결. * 트러블슈팅 능력: * 제시된 문제를 명확히 이해하고, 관련 정보를 수집하며, 체계적으로 분석하는 능력. * 실패 사례를 통한 학습과 경험 축적.
9. 기타 고급 튜닝 기법 및 고려사항
* 파트셔닝 (Partitioning):
* Range, List, Hash, Composite 등 다양한 파티셔닝 전략.
* 대용량 테이블의 관리, 성능, 유지보수 측면의 장점.
* 파티셔닝 Pruning 및 Partition Wise Join.
* PL/SQL 튜닝:
* PL/SQL 코드 최적화 (SQL 문장 분리, 커서 사용, 벌크 바인딩).
* 프로시저/함수 컴파일 및 실행 계획 분석.
* 병렬 처리 (Parallel Processing):
* PARALLEL
힌트를 이용한 병렬 쿼리 및 DML.
* 병렬 처리의 장점과 오버헤드.
* 데이터베이스 압축 (Compression):
* Advanced Compression, OLTP Compression 등.
* 디스크 공간 절약 및 I/O 감소 효과.
* 압축으로 인한 CPU 오버헤드 고려.
* Real Application Clusters (RAC) 환경 튜닝:
* Cache Fusion (캐시 퓨전) 및 Global Cache 서비스.
* Interconnect (인터커넥트) 경합 튜닝.
* RAC 환경에서의 SQL 튜닝 특이점.
이러한 항목들을 꾸준히 학습하고 실제 환경에 적용하며 경험을 쌓는다면, Oracle SQL 튜닝 분야에서 진정한 전문가가 될 수 있을 것입니다.