DB 28

다중버전 동시성 제어(MVCC, Multi-Version Concurrency Control)

MVCC는 데이터베이스에서 다수의 사용자가 동시에 데이터에 접근할 때, 데이터의 일관성과 동시성을 모두 높이기 위해 사용하는 트랜잭션 제어 기법입니다. 기존의 잠금(Lock) 기반 방식이 가진 '읽기 작업과 쓰기 작업 간의 병목' 문제를 해결하기 위해 고안되었습니다.1. 핵심 원리: "읽기와 쓰기는 서로를 차단하지 않는다"기존의 락킹(Locking) 방식에서는 한 트랜잭션이 데이터를 수정(Write)하는 동안 다른 트랜잭션이 해당 데이터를 읽지(Read) 못하도록 대기해야 했습니다. 반면, MVCC는 데이터가 변경될 때 기존 데이터를 덮어쓰는 대신 새로운 버전(Version)의 데이터를 생성하여 동시성을 확보합니다.읽기 작업(Read): 트랜잭션이 시작된 시점(또는 쿼리 시작 시점)의 데이터 스냅샷(과거..

DB 2026.02.15

비연쇄적 스케줄(Cascadeless Schedule)

데이터베이스 트랜잭션 관리에서 비연쇄적 스케줄(Cascadeless Schedule)은 시스템의 장애나 오류 발생 시, 하나의 트랜잭션 취소(Abort)가 다른 트랜잭션들의 연쇄적인 취소로 이어지는 '연쇄 복귀(Cascading Rollback)' 현상을 방지하기 위해 고안된 스케줄링 방식입니다.1. 비연쇄적 스케줄의 핵심 원리비연쇄적 스케줄의 규칙은 매우 단순하면서도 강력합니다.원칙: 어떤 트랜잭션이 데이터를 읽을 때, 반드시 '이미 커밋(Commit)이 완료된' 트랜잭션이 기록(Write)한 데이터만 읽도록 허용합니다.즉, 아직 커밋되지 않은 중간 상태의 데이터(Dirty Data)를 다른 트랜잭션이 읽는 것(Dirty Read)을 원천적으로 차단합니다.2. 왜 비연쇄적 스케줄이 필요할까? (연쇄 복..

DB 2026.02.15

2PLP (2-Phase Locking Protocol)

2단계 잠금 규약은 다수의 트랜잭션이 동시에 실행될 때 데이터의 일관성을 유지하고, 여러 트랜잭션이 섞여서 실행되어도 순차적으로 실행된 것과 동일한 결과(직렬가능성)를 보장하기 위한 표준적인 기법입니다. 핵심 원칙은 "트랜잭션이 한 번 잠금을 해제하기 시작하면, 더 이상 새로운 잠금을 획득할 수 없다"는 것입니다.1. 2PL의 두 가지 단계이름에서 알 수 있듯이, 2PL은 트랜잭션의 실행을 잠금(Lock)과 해제(Unlock) 기준에 따라 명확히 두 단계로 분리합니다.확장 단계 (Growing Phase):트랜잭션이 데이터를 읽거나 쓰기 위해 필요한 잠금(Lock)을 계속해서 획득해 나가는 단계입니다.이 단계에서는 새로운 잠금을 얻을 수만 있고, 이미 확보한 잠금을 해제(Unlock)할 수는 없습니다.트..

DB 2026.02.15

낙관적 병행제어(Optimistic Concurrency Control, OCC)

낙관적 병행제어는 데이터베이스 환경에서 여러 트랜잭션이 동시에 실행될 때, 트랜잭션 간의 데이터 충돌이 거의 발생하지 않을 것이라고 '낙관적'으로 가정하는 동시성 제어 기법입니다. 데이터를 읽거나 수정할 때 자원에 미리 락(Lock)을 걸지 않고 자유롭게 연산을 수행한 뒤, 최종적으로 변경사항을 실제 데이터베이스에 반영(Commit)하기 직전에 충돌 여부를 검사하는 것이 핵심입니다.작동 원리 (3단계)낙관적 병행제어는 일반적으로 다음 세 가지 단계를 거쳐 트랜잭션을 처리합니다.1. 읽기 단계 (Read Phase): 트랜잭션이 실제 데이터베이스의 데이터가 아닌, 각자의 개인 작업 공간(Local Workspace)으로 데이터를 복사해 옵니다.모든 읽기와 쓰기 작업은 이 복사본을 대상으로만 이루어지며, 실..

DB 2026.02.15

데이터베이스 동시성제어

데이터베이스 동시성 제어(Concurrency Control) 과정에서 트랜잭션 간의 격리성(Isolation)이 완벽하게 보장되지 않을 때 발생하는 대표적인 4가지 이상 현상(Anomaly)이 있습니다. 각 현상의 발생 원리와 구체적인 예시를 시간 흐름(Time)에 따라 정리해 드립니다.1. 갱신 손실 (Lost Update)두 개 이상의 트랜잭션이 동시에 같은 데이터를 읽고 수정할 때, 먼저 수정한 결과가 나중에 수정한 결과에 의해 덮어씌워져 무효화되는 현상입니다.원리: 트랜잭션이 데이터를 읽은 후 업데이트를 반영하기 전에, 다른 트랜잭션이 동일한 과거 데이터를 기준으로 업데이트를 수행하여 덮어씁니다.예시: 계좌 잔액이 10,000원인 상황에서 T1이 5,000원을 입금하고, T2가 3,000원을 입..

DB 2026.02.15

[병행제어] 타임스탬프 순서 규약 (Timestamp Ordering Protocol)

타임스탬프 순서 규약(Timestamp Ordering Protocol)은 데이터베이스 관리 시스템(DBMS)에서 다중 트랜잭션이 동시에 실행될 때, 데이터의 일관성을 유지하고 직렬가능성(Serializability)을 보장하기 위해 사용하는 동시성 제어 기법 중 하나입니다. 락(Lock)을 사용하지 않고, 트랜잭션이 시작될 때 부여받은 고유한 시간표(Timestamp)를 기준으로 데이터 접근 순서를 미리 결정하여 충돌을 방지합니다.1. 핵심 개념 및 구성 요소각 트랜잭션과 데이터 항목은 타임스탬프 값을 가지며, 이를 비교하여 연산의 허용 여부를 결정합니다.TS(T_i): 트랜잭션 T_i가 시스템에 진입할 때 부여받는 타임스탬프. 숫자가 작을수록 먼저 시작된 오래된(Older) 트랜잭션을 의미합니다.RT..

DB 2026.02.15

인덱스 분포도

인덱스 분포도(Index Distribution)는 데이터베이스 튜닝과 성능 최적화에서 가장 중요한 개념 중 하나로, 특정 컬럼의 데이터가 얼마나 고르게, 혹은 유니크하게 퍼져 있는지를 나타내는 지표입니다. 선택도(Selectivity)라는 용어와 혼용되어 사용되기도 합니다.1. 정의 및 핵심 개념인덱스 분포도는 '전체 레코드 중 특정 값을 가진 레코드가 차지하는 비율'을 의미합니다. 인덱스가 효율적으로 작동하기 위해서는 분포도가 좋아야(낮아야) 합니다.분포도가 좋다 (Good): 데이터의 중복이 적고, 특정 값을 조회했을 때 적은 수의 행(Row)만 반환되는 경우 (예: 주민등록번호, 사번)분포도가 나쁘다 (Bad): 데이터의 중복이 많고, 특정 값을 조회하면 많은 수의 행이 반환되는 경우 (예: 성별..

DB 2026.02.14

데이터베이스 주요 조인기법

1. 중첩 반복 조인 (Nested-Loop Join)프로그래밍의 이중 반복문(For-Loop)과 유사한 방식으로 동작하며, OLTP(온라인 트랜잭션 처리) 환경에서 주로 활용됩니다.처리 순서: 기준이 되는 선행 테이블(Driving Table)의 처리 범위를 먼저 액세스한 후, 추출된 값을 기준으로 참조 테이블(Driven Table)을 연결합니다.처리 범위 및 접근 방법: 선행 테이블의 추출 결과에 종속되어 후행 테이블의 처리량과 속도가 결정됩니다. 버퍼 크기만큼 부분적으로 결과를 반환하는 부분범위처리가 가능합니다.연결 수단 및 우선순위: 테이블 간 연결 조건의 인덱스 유무가 성능을 좌우합니다. 따라서 데이터량이 적고, 조건을 만족하는 행이 적은 테이블을 선행 테이블로 선택하는 것(우선순위 결정)이 ..

DB 2026.02.14

[인덱싱] 비트맵 조인 인덱스(Bitmap Join Index)

비트맵 조인 인덱스(Bitmap Join Index, BJI)는 두 개 이상의 테이블을 조인(Join)한 결과를 비트맵 형태로 미리 생성하여 저장해 두는 특수한 인덱스 기법입니다. 주로 데이터 웨어하우스(DW)와 같은 OLAP 환경의 스타 스키마(Star Schema) 구조에서, 무거운 조인 연산 성능을 극대화하기 위해 고안되었습니다.동작 원리 및 특징일반적인 비트맵 인덱스가 단일 테이블의 컬럼을 기준으로 만들어진다면, 비트맵 조인 인덱스는 물리적으로는 대용량 팩트 테이블(Fact Table)에 생성되지만, 논리적으로는 조인 대상인 디멘전 테이블(Dimension Table)의 컬럼 값을 기준으로 구성됩니다.사전 조인(Pre-Joined): 사용자가 쿼리를 실행할 때마다 매번 테이블을 조인하는 대신, 인..

DB 2026.02.14

[인덱싱] 클러스터 인덱스와 희소 인덱스

1. 클러스터 인덱스 (Clustered Index)클러스터 인덱스는 테이블의 실제 데이터가 물리적으로 정렬되는 방식을 결정하는 인덱스입니다. 사전에서 단어를 찾을 때 알파벳 순서대로 페이지가 정렬되어 있는 것과 같은 원리입니다.물리적 정렬: 인덱스의 키 값에 따라 테이블의 실제 데이터 행(Row)들이 정렬되어 저장됩니다.개수 제한: 데이터의 물리적인 순서는 하나만 존재할 수 있으므로, 테이블당 오직 한 개만 생성할 수 있습니다. (관계형 데이터베이스에서는 주로 기본키(Primary Key)에 자동 생성됩니다.)검색 속도: 인덱스의 리프 노드(Leaf Node)가 곧 실제 데이터 페이지이므로, 특정 범위의 데이터를 연속적으로 읽어오는 범위 검색(Range Query)에 매우 뛰어난 성능을 보입니다.데이터..

DB 2026.02.14