개념이 연결되는 이론 학습
과목과 소분류를 선택해 핵심 개념을 찾아보세요. 모든 이론은 로그인 없이 읽을 수 있습니다.
Oracle 아키텍처 입문: Database·Instance·Startup 단계
Database, Instance, Server Process를 물리 파일·실행 환경·사용자 요청 처리자로 구분합니다.
Oracle 메모리 구조: SGA·PGA·UGA와 Workarea
Instance 공유 영역인 SGA와 Oracle Process 전용 영역인 PGA를 사용 목적과 구성 요소로 비교합니다.
Oracle 프로세스 구조: Server Process·DBWn·LGWR·CKPT
사용자 SQL 처리와 데이터 기록·복구를 담당하는 핵심 Process의 책임을 구분합니다.
접속 아키텍처: Listener·Service·Session·Dedicated·Shared Server
Connection, Session, Listener, Server Process의 관계와 Connection Pool의 비용 절감 원리를 이해합니다.
SQL 처리 과정의 전체 흐름: Parse부터 Execute·Fetch까지
SQL이 Parse, 최적화, Row Source 실행과 Fetch를 거치는 전체 흐름을 단계별로 연결합니다.
Shared Pool과 SQL Parsing: Library Cache·Soft Parse·Hard Parse
Shared Pool의 Dictionary·Library Cache와 Parse Lock·Pin을 구분하고 Hard Parse 및 객체 무효화 비용을 이해합니다.
옵티마이저 입문: SQL의 실행 방법을 결정하는 원리
같은 결과를 더 적은 I/O·Call·Sort·반복으로 만드는 SQL 최적화의 기본 흐름을 옵티마이저 추정과 실제 실행 통계로 연결합니다.
CBO의 판단 과정: Query Transformer·Estimator·Plan Generator
Query Transformer가 표현을 바꾸고 Estimator가 Cardinality·Cost를 추정한 뒤 Plan Generator가 후보 실행계획을 비교합니다.
실행계획 읽기 기초: Row Source Tree와 예상·실제 계획
EXPLAIN PLAN의 예상 계획과 DISPLAY_CURSOR의 실제 Cursor 계획을 구분하고 Starts·E/A-Rows·Buffers를 아래에서 위로 읽습니다.
예상 실행계획 확인: EXPLAIN PLAN·PLAN_TABLE·AUTOTRACE
PLAN_TABLE에 예상 계획을 저장·출력하고 AUTOTRACE의 실행 여부·결과·통계 옵션을 구분해 안전하게 사용합니다.
옵티마이저 통계의 기초: Table·Column Statistics 읽기
NUM_ROWS·BLOCKS와 NDV·NULL·Low/High·Histogram이 기본 Cardinality와 값별 Selectivity 추정에 미치는 영향을 이해합니다.
Selectivity·Cardinality·Cost: 통계 추정과 Plan 선택 진단
조건 만족 비율에서 Row 수와 Plan Cost로 이어지는 CBO 계산 흐름과 오차 원인을 학습합니다.
SQL 작업량의 기초: Logical I/O·Physical I/O와 읽기 방식
Buffer Gets와 Physical Read를 구분하고 Single·Multiblock, Prefetch, Direct Path I/O의 선택 조건을 이해합니다.
DB Buffer Cache 내부 동작: Hash 탐색·Buffer 상태·Hot Block 진단
Buffer Cache의 Hash 탐색, 교체, Buffer 상태와 CBC·buffer busy waits 경합을 하나의 흐름으로 이해합니다.
실제 실행 통계 읽기: GATHER_PLAN_STATISTICS와 E-Rows·A-Rows
예상 Cardinality와 실제 Row Source 수행량을 비교해 최초로 어긋난 Plan 단계를 찾습니다.
Parent·Child Cursor 이해와 진단: SQL_ID·VERSION_COUNT·V$SQL_SHARED_CURSOR
Parent와 Child Cursor를 구분하고 Version Count 증가 및 공유 실패 원인을 진단합니다.
Cursor 재사용 계층: Library Cache·Session Cursor Cache·JDBC Statement Cache
Shared Pool 재사용을 넘어 Session Cursor Cache와 Prepared Statement 재사용으로 Parse Call 자체를 줄입니다.
B-Tree 인덱스 구조와 탐색: Root·Branch·Leaf·ROWID
B*Tree의 계층 구조와 수직·수평 탐색, NULL 저장 규칙 및 ROWID의 역할을 연결합니다.
Index Scan과 Table Full Scan: 선택도·I/O·손익분기점
읽을 데이터 비율과 I/O 방식에 따라 Index Scan과 Table Full Scan의 손익분기점을 판단합니다.
Index Unique·Range·Descending Scan: 탐색 범위와 정렬 방향
Unique·Range·Descending Scan의 시작점·종료점과 고유 키·범위·역방향 탐색 조건을 구분합니다.
Index Full Scan·Fast Full Scan·Table Full Scan: 정렬·I/O·Covering
Index Full Scan과 Index Fast Full Scan의 읽기 순서, 정렬 보장, 멀티블록·병렬 가능성, Covering 조건을 Table Full Scan과 비교합니다.
Index Skip Scan: 선두 컬럼 없이 논리 Subindex 탐색
복합 인덱스의 선두 컬럼 조건이 없을 때 선두 NDV별 논리 Subindex를 반복 Probe하는 Skip Scan의 적용 조건과 한계를 이해합니다.
인덱스를 활용하는 조건식: 컬럼 가공·묵시적 형변환·Sargability
인덱스 컬럼을 그대로 비교하고 Bind 타입을 맞춰 Start·Stop Key를 만들며 오류와 넓은 Scan을 방지합니다.
IN·BETWEEN·LIKE 조건의 인덱스 탐색: 반복 Probe와 연속 범위
IN-List, BETWEEN, LIKE가 만드는 인덱스 탐색 구간과 반복 Probe 비용을 비교하고, 선택 조건을 결과 의미와 실제 통계로 판단합니다.
복합 인덱스의 조건 처리: Access Predicate·Index Filter·Table Filter
복합 인덱스에서 Access Predicate가 시작·종료 범위를 정하고 Filter Predicate가 읽은 Entry를 거르는 차이를 이해합니다.
복합 인덱스의 검색 범위: 사전식 정렬과 Start·Stop Key
복합 인덱스가 사전식 순서로 정렬된다는 원리를 이용해 조건 조합별 시작점·종료점과 실제 Leaf 스캔 범위를 정확히 계산합니다.
테이블 랜덤 액세스의 원리: ROWID·Buffer I/O·후행 조건
Index가 찾은 ROWID와 Table Block 방문 비용을 연결해 Random Access 최소화 원리를 이해합니다.
Clustering Factor 이해: 인덱스 순서와 Table Block 배치
Index Key 순서와 Table Row 물리 배치의 상관관계가 ROWID Table Block 방문 수를 바꾸는 원리를 이해합니다.
인덱스 손익분기점: ROWID 액세스와 Full Scan 비용 비교
Index Range Scan과 Table Full Scan의 손익분기점을 결과 비율이 아닌 Random Access·CF·정렬·병렬 조건으로 판단합니다.
ROWID Batching과 결과 순서: TABLE ACCESS BY INDEX ROWID BATCHED
인덱스에서 모은 ROWID를 테이블 블록 방문 효율에 맞게 처리하는 BATCHED 접근과 SQL 결과 순서 보장 원칙을 구분합니다.
인덱스 스캔 효율과 Covering: Leaf Scan·Table Access 줄이기
읽은 Index Entry 대비 필요한 결과 비율을 측정하고 Filter·조회 컬럼을 포함해 Table Random Access를 줄입니다.
복합 인덱스 설계 원칙: 조건·정렬·수행 빈도·DML 비용
자주 수행되는 Critical Access Path를 기준으로 등치·범위·정렬·선택도와 DML 비용을 함께 고려해 복합 인덱스를 설계합니다.
Function-Based Index: 표현식 검색·NULL·정렬 최적화
반복되는 표현식에 Function-Based Index를 적용하되 NULL 의미·NLS·결정성·ORDER BY 활용 조건을 검증합니다.
Bitmap Index의 원리와 적용: 비트 연산·NULL·DML 동시성
Key별 Bitmap과 ROWID 변환, 다중 조건 결합의 장점 및 OLTP DML 잠금 위험을 이해합니다.
Index Join과 Bitmap Conversion: 여러 인덱스의 ROWID 결합
여러 B*Tree 인덱스의 ROWID 집합을 Hash Join 또는 임시 Bitmap으로 결합하는 원리와 복합 인덱스 대비 적용 조건을 이해합니다.
IOT 구조와 성능: Primary Key Leaf·Overflow·Secondary Index
Index-Organized Table이 Primary Key B*Tree Leaf에 행을 저장하는 구조와 Overflow·Secondary Index의 Logical ROWID 비용을 이해합니다.
Cluster Table 구조와 적용: Index Cluster·Hash Cluster
같은 Cluster Key의 Row를 가까이 저장하는 Index Cluster와 Hash 계산으로 Block을 찾는 Hash Cluster의 조회·공간·DML 조건을 비교합니다.
중복 인덱스 관리: 포함 관계·용도 차이·안전한 제거
선두 컬럼이 겹치는 완전·불완전 중복 인덱스의 실제 사용 SQL과 선택도를 비교해 안전하게 통합·제거합니다.
Histogram 이해: 데이터 편중·인기 값·Bind 실행계획
편중된 값 분포를 Histogram이 어떻게 요약하고 Literal·Bind 조건의 Plan 안정성에 어떤 영향을 주는지 설명합니다.
복합 조건의 추정 보완: Dynamic Statistics·Column Group·Expression Statistics
Parse 시점 Sampling과 지속 저장되는 Column Group·Expression Statistics의 역할과 비용을 비교합니다.
Index·System Statistics: Access Path 비용을 만드는 입력값
BLEVEL·LEAF_BLOCKS·CLUSTERING_FACTOR와 CPU·Single/Multiblock I/O 특성이 Index와 Full Scan 비용 비교에 반영되는 원리를 이해합니다.
DBMS_STATS 통계 운영: 수집·Stale·Incremental·Pending·복구
수집 명령 암기를 넘어 자동 수집, 변경률, 파티션 Synopsis, 검증·복구까지 안정적인 통계 운영 흐름을 학습합니다.
Bind Variable과 실행계획: Bind Peeking·Adaptive Cursor Sharing
Bind 변수의 Cursor 공유 이점과 Data Skew 부작용을 Bind Peeking·ACS·CURSOR_SHARING으로 구분합니다.
조인의 결과 의미: Inner·Outer·Semi·Anti Join과 NULL
보존 Row와 존재 여부를 기준으로 Outer·Semi·Anti Join을 구분하고 NULL 함정을 피합니다.
조인 최적화의 기본: 조인 순서·접근 경로·조인 방식
NL·Hash·Sort Merge Join의 반복 탐색·Hash Table·정렬 병합 구조를 입력 크기·Index·Memory 관점에서 비교합니다.
조인 전에 행 수 줄이기: 필터링·선집계·부분범위 처리
조인 전에 중복 Key를 집계하거나 선택적 집합을 먼저 줄이고 Top-N·Predicate Pushdown으로 전체 작업량을 낮춥니다.
Nested Loops Join 기본 원리: Outer·Inner·반복 탐색
Driving Row마다 Inner Row Source가 반복 시작되는 NL Join 구조를 Starts와 A-Rows로 계산합니다.
Nested Loops Join 튜닝: 선행 집합·Predicate·ROWID 비용
Outer·Inner Access Predicate와 Table Filter를 분리해 불필요한 ROWID Random Access가 시작되는 지점을 찾습니다.
Nested Loops Join 고급 실행 구조: ROWID Batching·Hint 검증
NL Join의 Prefetch·Batched ROWID Access·Buffer Pinning과 조인 순서 Hint가 반복 I/O와 결과 순서에 미치는 영향을 이해합니다.
Sort Merge Join의 원리와 튜닝: 정렬·병합·Workarea·비등치 조인
두 입력의 정렬과 Merge 단계, PGA·TEMP 비용 및 비등치 조인 활용 조건을 학습합니다.
Hash Join의 원리와 Workarea: Build·Probe·PGA·TEMP Spill
작은 입력으로 Hash Table을 만들고 큰 입력을 Probe하며 메모리 부족 시 TEMP Partition으로 Spill되는 과정을 이해합니다.
Hash Join 고급 튜닝: Data Skew·Bloom Filter·Build Input 제어
중복 Hash Key와 Data Skew가 CPU·분배 비용을 키우는 원리, Bloom Filter와 Build Input 제어의 적용 조건을 이해합니다.
Sort Operation 이해: ORDER BY·JOIN·WINDOW SORT
SORT ORDER BY·SORT JOIN·WINDOW SORT가 행 순서를 만드는 목적과 전체 입력을 준비해야 하는 비용을 이해합니다.
Sort Workarea 진단: Optimal·One-Pass·Multi-Pass·TEMP
Sort Workarea가 메모리를 초과할 때 TEMP로 Spill되는 Optimal·One-Pass·Multi-Pass 처리와 비용을 진단합니다.
Sort 부하 줄이기: 입력 행 수·Row 폭·연산 위치
정렬 전에 행 수와 행 폭을 줄이고 Top-N·Index Order를 활용해 메모리와 TEMP 사용을 최소화합니다.
집계와 중복 제거: SORT·HASH Operation 비교
SORT AGGREGATE·SORT/HASH GROUP BY·SORT/HASH UNIQUE의 입력·출력 행 의미와 순서 보장 차이를 비교합니다.
집합 연산·EXISTS로 Sort와 중복 제거 줄이기
UNION을 UNION ALL의 상호 배타 분기로 바꾸거나 EXISTS·NOT EXISTS로 존재만 확인해 불필요한 SORT UNIQUE를 줄입니다.
Index Order로 Sort 생략: ORDER BY·Top-N·GROUP BY NOSORT
WHERE의 선행 Key 고정과 Index 순서가 ORDER BY·GROUP BY를 만족할 때 Sort를 생략하고 부분범위 처리를 가능하게 합니다.
Top-N 처리 원리: ROWNUM·FETCH FIRST·STOPKEY
정렬 기준의 앞쪽 N건을 구할 때 ROWNUM 위치와 FETCH FIRST 문법, COUNT·SORT ORDER BY STOPKEY의 실제 읽기 범위를 이해합니다.
MIN/MAX 최적화와 Top-1 조회: 값·행·동점의 차이
집계값 하나를 구하는 MIN/MAX 최적화와 정렬된 행 하나를 반환하는 Top-1의 의미·NULL·동점·인덱스 조건을 구분합니다.
부분범위 처리 기초: 첫 행 응답·Fetch 중단·전체 처리량
전체 결과를 끝까지 처리하지 않고 필요한 Row까지만 Fetch해 초기 응답을 줄이는 부분범위 처리의 기본 원리를 이해합니다.
부분범위 처리 성립 조건: Index Order·STOPKEY·Blocking Operation
ORDER BY 요구 순서를 지원하는 인덱스가 전체 Sort를 피하고 앞쪽 Row부터 반환하게 만드는 조건을 이해합니다.
옵티마이저 목표 모드: ALL_ROWS와 FIRST_ROWS(n)
전체 처리량을 중시하는 ALL_ROWS와 앞쪽 n건 응답을 중시하는 FIRST_ROWS(n)의 Cost 목표와 적용 범위를 비교합니다.
Pagination 성능 원리: ROWNUM·OFFSET·Keyset Pagination
페이지 번호가 깊어질수록 앞 행을 읽고 버리는 ROWNUM·OFFSET 비용과 마지막 키 이후부터 찾는 Keyset Pagination을 비교합니다.
조회 왕복 최소화: Fetch Size·Row Limiting·OFFSET·Keyset Pagination
Array Fetch·JDBC Fetch Size와 Server-Side Pagination을 사용해 결과 전송 왕복과 불필요한 Row 처리를 줄입니다.
n-Tier 부분범위 처리 구현: Stateful Cursor·Stateless Pagination·Connection Pool
Cursor를 열어 필요한 만큼 Fetch하는 구현과 n-Tier·Connection Pool 환경에서 상태 유지·Timeout·재요청을 설계합니다.
Array Fetch 실측: Fetch Call·Rows per Fetch·Network·메모리
Array Size와 Fetch Size가 Network Round Trip·Client 메모리·불필요 전송량을 바꾸는 원리를 수치로 계산합니다.
스칼라 서브쿼리 기본 원리: 0행·1행·다중행과 반복 실행
Scalar Subquery의 0건·1건·다건 반환 규칙과 상관 실행의 반복 비용을 이해하고 Join·사전 집계 대안과 결과 의미를 비교합니다.
상관 서브쿼리 FILTER 실행: Starts·조기 종료·Semi/Anti Join
상관 서브쿼리가 FILTER로 반복 실행되는 구조와 입력 Key Cache가 Starts·I/O를 줄이는 조건을 이해합니다.
Query Transformation 기초: Query Block·동등 변환·Plan 탐색
Optimizer가 SQL을 동등한 형태로 바꾸는 목적, 적용 조건과 대표 변환을 전체 지도처럼 정리합니다.
Subquery Unnesting: Semi·Anti Join과 NOT IN NULL 정합성
Subquery를 Semi·Anti Join으로 변환할 때 존재 의미·중복 제거·NULL 규칙을 보존하는 조건을 이해합니다.
LATERAL·APPLY 조인: 왼쪽 상관 참조와 Key별 Top-N
왼쪽 Row를 참조하는 인라인 집합을 조인하는 APPLY 문법과 Outer 보존 의미를 예제로 익힙니다.
스칼라 서브쿼리 반복 제거: 사전 집계·LATERAL·구조화 반환
같은 범위를 여러 Scalar Subquery가 반복 읽는 문제를 사전 집계 Join·LATERAL과 구조화된 반환 방식으로 개선합니다.
Scalar Subquery Cache·Result Cache·DETERMINISTIC: 재사용과 정확성
반복 계산을 줄이는 Scalar Subquery Cache, SQL·PL/SQL Result Cache와 DETERMINISTIC의 보장 범위를 비교합니다.
View Merging·Predicate Pushdown: Query Block 통합과 조건 조기 적용
View를 합치거나 조건을 내부로 밀어 읽을 Row를 줄이는 두 변환과 적용 제한을 비교합니다.
OR Expansion·조건 이행·Join Elimination: 분기·파생 조건·불필요 조인 제거
OR 분기, 등식에서 파생되는 조건, 신뢰 가능한 제약에 따른 Table 제거를 실행계획 관점으로 정리합니다.
이력 데이터 조회: 점이력·선분이력·기간 겹침과 Temporal Validity
변경 시점과 유효 기간 모델을 구분하고 최신 1건·특정 시점·기간 겹침 Query를 안전하게 설계합니다.
최신 이력 조회: Top-1·ROW_NUMBER·DENSE_RANK·KEEP
이력 데이터에서 최신 한 건 또는 최신 시점의 여러 값을 효율적으로 찾는 대표 패턴을 비교합니다.
Static·Dynamic SQL과 선택적 검색조건: NULL 의미·Bind·SQL Shape·보안
SQL 생성 방식과 Bind 사용을 분리해 이해하고 선택적 조건의 OR·NVL·UNION ALL 패턴을 비교합니다.
Materialized View와 Query Rewrite: Refresh·정합성·운영 비용
상세 Table Query를 미리 집계한 Materialized View로 재작성하는 조건, 검증과 일관성 Trade-off를 학습합니다.
적응형 최적화: Adaptive Plan·Statistics Feedback·Adaptive Cursor Sharing
예상 Cardinality가 빗나갔을 때 현재 실행과 다음 실행에서 Oracle이 보완하는 방식을 구분합니다.
옵티마이저의 한계와 역할 분담: 좋은 판단 조건 만들기
옵티마이저가 업무 의미와 잘못된 SQL 구조를 대신 해결하지 못하는 한계를 이해하고 통계·SQL·힌트의 책임 범위를 정합니다.
옵티마이저 힌트 사용법: 문법·적용 범위·검증
Hint가 강제 명령이 아니라 적용 조건이 맞을 때 Plan 선택에 영향을 주는 지시임을 이해하고 Query Block·Alias·실제 적용 여부를 검증합니다.
응답시간 분석: DB Time·CPU·Wait Event
대기 횟수보다 응답시간과 업무 영향에 초점을 맞춰 CPU·I/O·Concurrency·Network 병목을 분류합니다.
누적 성능 통계 읽기: V$SYSSTAT·V$SESSTAT과 Delta
누적 통계를 그대로 비교하지 않고 동일 범위의 Snapshot 차이와 업무량으로 정규화합니다.
Top SQL 선정: V$SQL의 총량·실행당 부하·Child Cursor
Child Cursor 누적 통계를 총량·1회당 부하·Parse 효율로 나눠 튜닝 우선순위와 Cursor 공유 문제를 찾습니다.
단일 세션 정밀 진단: SQL Trace·TKPROF
SQL Trace를 필요한 범위에만 수집하고 TKPROF의 Call 통계와 Wait를 해석합니다.
시간 구간 성능 분석: AWR·Statspack·ASH
AWR의 구간 요약과 ASH의 Active Session 표본을 결합해 Peak 원인을 좁힙니다.
진단 도구 선택과 교차 검증: AUTOTRACE·DISPLAY_CURSOR·SQL Monitor·V$SQL
예상 계획·실제 통계·장시간 SQL 모니터링·누적 지표를 상황에 맞게 선택하고 교차 검증합니다.
SQL 성능 문제 진단 절차: 증상 정의부터 개선 검증까지
감이 아니라 측정 범위와 응답시간을 기준으로 SQL·Application·System 원인을 단계적으로 좁힙니다.
파티션 설계의 기본: Range·List·Hash·Composite·Interval·Reference
대용량 Object를 Segment 단위로 나누는 목적과 업무 Access·관리 패턴에 맞는 Partition Key 선택을 학습합니다.
Partition Pruning 해석: Static·Dynamic·PSTART·PSTOP
Compile 시점과 실행 시점의 Partition 제거를 구분하고 실행계획의 PSTART·PSTOP과 Predicate를 함께 읽습니다.
파티션 인덱스 설계: Local·Global·Prefixed·Unique
Local과 Global Partitioned Index의 파티션 대응 관계, 정렬 범위, 유지관리 영향과 Partition Pruning 조건을 비교합니다.
Partition-Wise Join: Full·Partial·병렬 재분배
조인 키 기준 파티션 정렬을 이용해 큰 조인을 작은 파티션별 조인으로 나누는 Full·Partial Partition-Wise Join의 조건과 실행계획을 이해합니다.
파티션 유지관리와 대량 데이터 처리: EXCHANGE·DROP·TRUNCATE
많은 Row를 직접 변경하지 않고 Partition 단위 메타데이터 작업으로 UPDATE·DELETE·INSERT 부하를 줄입니다.
병렬 실행 구조: QC·PX Server Set·Table Queue·Granule
하나의 SQL을 여러 PX Server에 분배하는 Coordinator, Server Set, Table Queue와 작업 단위를 연결합니다.
병렬 데이터 분배와 Skew: HASH·BROADCAST·RANGE·Bloom Filter
병렬 Sort·Group·Join에서 Row를 어느 PX Server로 보낼지 결정하는 분배 방식과 불필요한 전송을 줄이는 Bloom Filter를 학습합니다.
Parallel Query·DDL·DML 운영: DOP·활성 조건·자원·트랜잭션
병렬화의 초기화·통신 비용, PDML 활성 조건과 Lock·Undo·Memory·동시성 Trade-off를 운영 관점에서 정리합니다.
Redo·Checkpoint·Commit 원리: WAL·Fast Commit·Instance Recovery
Online·Archived Redo Log, WAL, LGWR, log file sync를 복구와 Commit 흐름으로 연결합니다.
트랜잭션 경계와 격리 수준: ACID·COMMIT·READ COMMITTED·SERIALIZABLE
ACID와 Statement·Transaction 수준 일관성, Dirty·Non-Repeatable·Phantom Read를 비교합니다.
Undo의 원리와 운영: Rollback·Read Consistency·AUM·ORA-01555
Undo의 세 가지 목적과 AUM, Retention, ORA-01555의 관계를 학습합니다.
Oracle 읽기 일관성: SCN·CR Block·Current Get·SQL Trace
Query SCN과 Undo로 CR Block을 만들고 SQL Trace의 query·current를 읽는 원리를 연결합니다.
Oracle Lock의 기본 구조: Row Lock·TX Enqueue·TM Enqueue·Lock Mode
Row의 Lock Byte부터 Transaction TX Lock과 Table TM Lock까지 보호 계층을 연결합니다.
Database Call 최소화: One-SQL·Array DML·Bulk Binding·JDBC Batch
Row-by-Row 반복을 집합 SQL과 Batch·Array 처리로 바꿔 Network Round Trip과 Execute Call을 줄입니다.
SQL 안의 PL/SQL 호출 최적화: Context Switch·Recursive SQL·Set-Based 변환
SQL 안의 PL/SQL 함수가 만드는 Context Switch·Recursive SQL·반복 I/O를 찾아 집합 기반으로 변환합니다.
대량 DML 비용 구조: 탐색·Index·Undo·Redo·Lock·Commit
대량 DML에서 테이블 변경 외에 인덱스·제약조건·Undo·Redo·Lock·Commit 비용이 함께 증가하는 원리를 계산합니다.
B-Tree 인덱스 DML 비용과 경합: Delete·Split·Hot Block·재구성
B*Tree Delete·Split과 우측 성장 경합을 구분하고 측정 근거가 있을 때만 재구성 전략을 선택합니다.
DML Call 최소화: One-SQL·FORALL·Array Bind·Batch
Row-by-Row 처리를 One-SQL과 Array·Batch 처리로 바꾸어 Parse·Execute·Network Round Trip을 줄입니다.
집합 기반 DML 선택: MERGE·조인 갱신·Multi-Table INSERT
서로 다른 목적의 조인 기반 DML 세 가지를 비교해 갱신·동기화·다중 적재 요구에 맞는 방식을 선택하고 정합성 위험을 피합니다.
수정 가능한 조인 뷰: Key Preservation·결정성·안전한 대안
조인 결과를 직접 갱신할 때 한 View Row가 Target Base Row 하나에 대응하는 Key Preservation 조건과 제한을 이해합니다.
MERGE 정확성과 성능: Source 유일성·조건부 DML·DELETE WHERE
MERGE의 Source 유일성·ON 조건·UPDATE·INSERT·DELETE WHERE 실행 규칙을 이해하고 반복 조회와 중복 갱신을 방지합니다.
대량 적재 운영 전략: Index·Constraint·UNUSABLE·재구축
대량 적재 전후에 인덱스와 제약조건을 비활성화·재구축하는 전략의 이득과 장애·복구 위험을 판단합니다.
Direct-Path Insert: APPEND·HWM·Undo·Redo·NOLOGGING
Buffer Cache 일반 경로를 우회하는 Direct Path I/O와 HWM 위 적재 방식의 성능·Undo·Redo·공간 특성을 이해합니다.
병렬 DML 운영: 활성화·실제 DOP·제약·검증
Parallel DML 활성화 조건과 QC·PX Server 역할, 강한 Lock·Commit 제약 및 실제 병렬 동작 확인 방법을 이해합니다.
ITL과 Block Cleanout: Block 내부 Transaction 추적과 동시 DML
ITL Slot, Lock Byte, Transaction ID와 Commit 후 Block Cleanout의 관계를 이해합니다.
DML Write Consistency: Current 갱신·Statement Restart·Lost Update
UPDATE의 대상 탐색과 실제 갱신 모드를 구분하고 동시 변경 시 Restart와 Lost Update를 예방합니다.
Lock 경합 진단: Waiter·Blocker·TX/TM Event·ITL·Deadlock
이벤트 이름만으로 결론 내리지 않고 TX·TM 경합의 원인을 Resource와 Block 단위로 좁힙니다.
비관적·낙관적 동시성 제어: FOR UPDATE·Version Column·재시도
Lock 선점과 갱신 시 충돌 검증 방식을 비교하고 안전한 Version Column 패턴을 적용합니다.
SELECT FOR UPDATE 실전: OF·NOWAIT·WAIT·SKIP LOCKED
조인 조회에서 FOR UPDATE가 잠그는 행과 FOR UPDATE OF가 특정 테이블의 행만 Lock 대상으로 지정하는 규칙을 이해합니다.
안전한 채번 설계: Sequence·Identity·채번 Table·MAX+1
채번 Table, Oracle Sequence, MAX+1과 Identity Column의 동시성·Gap·Transaction 의미를 비교해 안전한 식별자 생성 방식을 선택합니다.
Sequence와 Right-Growing Index 경합: CACHE·RAC·Reverse·Scalable
Sequence 할당 경합과 증가 Key가 Rightmost Leaf에 집중시키는 Index Hot Block을 구분하고 RAC·Reverse Key·Hash Partition·Scalable Sequence 대안을 판단합니다.
Oracle RAC 구조: 다중 Instance·Cache Fusion·GCS·GES
RAC의 Instance별 Cache와 Cache Fusion, 전역 Block Mode 및 Resource Master를 통해 공유 Database의 일관성을 이해합니다.