본문 바로가기

Database

(6)
[Database] 인덱스 스플릿 (Index Split) 인덱스 스플릿(Index Split) 이란?데이터베이스에서 B-Tree 구조에서 인덱스를 관리할 때 발생하는 현상이다.인덱스 스플릿은 인덱스 페이지에 더 이상 데이터를 추가할 공간이 없을 때 페이지를 나누어 새로운 데이터를 삽입할 수 있도록 하는 작업이다. 인덱스 스플릿(Index Split) 과정1. 새로운 데이터 삽입 시도2. 공간 부족 감지3. 페이지 분할 발생4. 부모 노드 업데이트아래 예시를 통해 인덱스 스플릿 현상을 확인해보자.Step 1. 기존 인덱스 페이지 상태+---------------------+| Index Page ||---------------------|| 1 | 2 | 3 | 4 | 5 |+---------------------+하나의 인덱스 페이지가 8K..
[Database] 정규화(Normalization) 정규화(Normalization) 는 데이터베이스 설계에서 데이터를 구조화하여 데이터 중복을 최소화하고, 데이터 무결성을 유지하며, 데이터베이스 성능을 최적화하는 과정이다. 정규화는 여러 단계로 나누어지며, 각 단계는 특정한 정규형을 만족시키도록 데이터베이스를 변환한다. 정규화(Normalization) 목적1. 데이터 중복 최소화데이터 중복을 줄여 저장 공간을 효율적으로 사용하고, 데이터 일관성을 유지한다.2. 데이터 무결성 유지데이터 무결성을 유지하여 데이터의 정확성과 신뢰성을 보장한다.3. 데이터베이스 성능 최적화효율적인 데이터베이스 구조를 통해 쿼리 성능을 향상시킨다. 정규화(Normalization) 과정 1. 제1정규형 (1NF: First Normal Form)모든 열의 값이 원자 값(ato..
[Database] 인덱스 (클러스터드,넌클러스터드,구조,종류,생성) 인덱스란?책의 목차와 같이 원하는 데이터를 빠르게 찾을 수 있게 해주는 객체(Object) 이다.목차가 없다면 원하는 정보를 찾기 위해 책의 첫 페이지부터 전체를 뒤져야 하지만 목차가 있다면 원하는 정보가 몇 페이지에 있는지 금방 찾을 수 있다.이처럼 인덱스도 데이터를 찾을 때 전체를 다 뒤지기보다 목차를 통해 해당 데이터를 바로 찾을 수 있게끔 도와준다.하지만, 인덱스를 사용한다고 해서 무조건 좋은 것은 아니다. 목차를 만들기 위해 책의 페이지가 필요하고, 책의 정보를 추가,수정,삭제하면 목차를 수정해야하는 리소스가 필요하듯 인덱스를 저장하기 위한 공간이 필요하고 데이터를 변경할때의 리소스가 필요하다. 또, 무분별하게 생성된 인덱스는 용량을 차지하고, 옵티마이저의 최적화를 낮추는 결과를 얻게 된다.  ..
[Database] JOIN 기법의 종류 (Nested Loops Join, Merge Join, Hash Join) 조인에는 세 가지 기법이 존재한다. 1. 중첩 루프 조인 (Nested Loops Join) 2. 병합 조인 (Sort Merge Join) 3. 해시 조인 (Hash Join) 다양한 상황에서 최적의 성능을 내기 위해 적절한 JOIN 계획을 세워 동작을 수행한다. 일반적으로 옵티마이저가 계획을 세워 동작을 수행하지만, 항상 최적화된 계획만을 세우지는 않는다. 그런 경우, 수동적으로 JOIN 계획을 세워 넣어줘야하는 경우가 있다. 각각의 JOIN 계획이 어떻게 동작하며, 어떤 상황에 어떤 기법이 효과적인지 알아보자. 1. 중첩 루프 조인 (Nested Loops Join) NL Join 방식 조인하려는 두 개의 테이블 중 더 작은 테이블을 선행 테이블 (Outer Table) 이라 하고, 더 큰 테이블을..
[Database] 트랜잭션 격리 수준 (Transaction Isolation Level) 트랜잭션 격리 수준 (Transaction Isolation Level) 이란, 동시에 여러 트랜잭션이 처리될 때 트랜잭션끼리 서로 얼마나 고립(isolation) 되어 있는지를 나타낸다. 즉, 하나의 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정한다. 우선 Isolation Level 에 대해 알기 전에 알아야 할 개념이 있다. 바로 Consistent Read 이다. Consistent Read 란, 말그대로 "일관된 읽기" 로 생각하면 된다. SELECT 문 실행 시 동시에 다른 트랜잭션에서 데이터를 변경하더라도 Undo Log 에 변경 전의 데이터(snapshot) 를 생성하고, 해당 시점의 snapshot 을 가져와 동일한 결과를 반환하여 일관성을 보장하기 위한 ..
[Database] MVCC - 다중 버전 동시성 제어 (Multi Version Concurrency Control) 데이터베이스에서는 여러 사용자가 동시에 접근하여 데이터를 읽고, 변경할 수 있는 동시성이 중요하다. 또한, 동시성과 함께 데이터의 일관성이 보장되어야한다. 이 동시성을 제어하고 일관성을 보장해주는 방법 중 하나가 MVCC (Multi Version Concurrency Control) 다중 버전 동시성 제어이다. ■ 기존 Locking 방식의 문제점 Locking 방식의 경우, 쓰기 작업이 수행되는동안 해당 데이터를 읽거나 쓸 수 없어 동시성의 문제가 발생한다. MVCC 를 통해 Locking 의 문제점을 해결할 수 있다. ■ MVCC 의 특징 ㆍ MVCC 는 데이터베이스의 snapshot 을 이용하여 구현된다. ㆍ 사용자가 데이터를 변경하면 데이터를 바로 변경하는 것이 아니라 변경 전의 데이터(snap..

반응형