공부/DB 6

[DB] Undo Log & Redo Log

Undo Log실패한 트랜잭션에 대해 데이터 변경 사항 롤백트랜잭션 원자성(Atomicity)을 지원한다.데이터베이스 일관성을 보장Undo Log 동작 방식트랜잭션 시작 시 이전 값(Old Value)을 로그에 기록트랜잭션 도중 장애 발생 시 Undo Log를 사용하여 이전 값으로 복구트랜잭션이 커밋되면 Undo Log는 삭제되거나 무시된다.Redo Log커밋된 트랜잭션의 변경 사항을 장애 복구 시 재실행한다.데이터베이스 지속성(Durability)을 보장한다.Redo Log 동작 방식트랜잭션 변경 사항이 로그에 기록된다.시스템 장애가 발생하면 Redo Log에 저장된 변경 사항을 다시 적용한다.트랜잭션이 커밋된 경우에만 Redo Log가 사용된다.트랜잭션 흐름에서의 역할트랜잭션 시작변경 사항을 Undo..

공부/DB 2025.02.28

[DB] Checkpoint 아키텍처

Checkpoint 아키텍처데이터베이스 시스템에서 장애 복구와 데이터 무결성을 보장하기 위해 사용되는 기술이다.데이터베이스가 특정 시점의 상태를 저장하고, 장애 발생 시 해당 시점부터 복구를 시작할 수 있도록 한다.디스크에 저장된 영구 데이터와 메모리에 캐싱된 임시 데이터를 동기화하는 과정Write-Ahead Logging(WAL) 메커니즘과 함께 사용된다.Checkpoint 동작 방식로그 작성(WAL)트랜잭션 변경 사항이 먼저 로그 파일에 기록Checkpoint 생성특정 시점에 메모리의 변경 사항을 디스크에 반영이 때, Checkpoint 레코드가 로그에 추가로그 제거Checkpoint 이전에 완료된 트랜잭션 로그는 삭제하거나 재사용장애 복구장애 발생 시 Checkpoint부터 로그 파일을 재처리하여 ..

공부/DB 2025.02.28

[DB] VARCHAR와 TEXT

VARCHAR 한 레코드에서 사용할 수 있는 최대 공간의 크기에 영향을 준다. 컬럼에 저장된 값이 큰 경우 Off-Page에 저장 최대 크기 길이 제한 충족 시 (컬럼 값의 길이(Prefix) 지정) 인덱스 생성이 가능하다. TEXT LOB(Large Object) 타입 B-Tree 외부의 Off-Page에 저장 MySQL에서는 저장 공간이 많이 필요한 경우에만 Off-Page에 저장 최대 크기 길이 제한 충족 시 (컬럼 값의 길이(Prefix) 지정) 인덱스 생성이 가능하다. Off-Page MySQL 엔진과 InnoDB 스토리지 엔진은 uchar* records[2] 메모리 버퍼를 이용하여 레코드 데이터를 주고 받는다. TABLE 구조체 내에 해당 메모리 공간이 정의되어 있으며, 여러 커넥션에서 공유..

공부/DB 2023.11.22

[DB] Index

Page란? 디스크와 메모리에 I/O가 이루어지는 데이터 Read/Write의 최소 작업 단위이다. 하나의 컬럼만 읽고 싶어도 레코드가 속한 페이지 전체를 읽어야 한다. 만약 레코드를 찾는데 1개의 페이지만으로 처리가 안된다면 추가 페이지를 읽어야 하는데, 그러한 과정은 디스크 I/O 작업로 인한 성능 저하 및 메모리 효율 저하를 불러온다. 또한, 페이지에 저장되는 데이터의 크기가 크면 메모리에 캐싱해둘 수 있는 페이지 수도 줄어들게 된다. 따라서 페이지에 저장되는 개별 데이터의 크기를 최대한 작게 하여 1개의 페이지에 많은 데이터가 담기도록 하는 것, 그리하여 액세스하는 Page 수를 최대한 줄이는 것이 DB 성능 개선에 매우 큰 영향을 준다. Extent란? 연속된 Page(=Block)를 정해진 수..

공부/DB 2023.11.14

[DB] Charset, Collation, utf8mb4

Charset 문자를 표현하기 위해 각 문자를 정수값에 대응시켜 놓은 체계. 글자나 기호들의 집합을 정의한 것으로, 인코딩의 집합이자 문자 데이터에 대한 저장공간 크기의 정의이다. 문자가 깨지거나 이상한 값으로 저장되는 경우, 해당 Charset에 정의(지원)되지 않은 문자 데이터를 저장했기 때문이다. 말하자면 Charset은 컴퓨터와 정의한 암호표이다. 데이터를 메모리에 저장을 할 때는 이진수의 숫자값으로 저장하게 되는데, 문자를 어떤 숫자로 정의할 것인지(인코딩), 그리고 숫자값을 문자화 시킬 때 데이터를 얼만큼의 크기로 읽어서 어떤 문자로 변환할 것인지(디코딩)를 정하는 데에 사용되는 암호표가 Charset이라고 할 수 있다. DB에서 주로 사용하는 Charset은 latin1, euckr, utf..

공부/DB 2023.11.09

[DB] CHAR과 VARCHAR

CHAR CHAR는 고정 사이즈로 무조건 처음 선언된 크기만큼 소모된다. 문자열을 채우고 남는 공간은 공백으로 채우게 된다. 값을 받아올 때는 공백이 자동으로 제거됨 공백까지 읽고 싶다면 PAD_CHAR_TO_FULL_LENGTH 모드 활성화 필요 고정길이 데이터 컬럼에 적합 CHAR열의 최대 크기는 255 바이트 VARCHAR 가변 길이 데이터 삽입 시 255글자 이하에는 1바이트, 이상에는 2바이트의 추가 공간 필요 길이 정보 + 실제 데이터로 이루어져 있다. 길이가 다양한 컬럼, 혹은 정의된 길이와 실제 데이터 길이에 차이가 있는 컬럼에 적합 VARCHAR로 저장된 값을 변경하려고 할 때, 변경할 값이 저장된 사이즈보다 크다면 새로운 저장 영역에 새로 할당해야 하므로 데이터 파편화가 발생할 수 있다..

공부/DB 2023.11.07