SQL Server의 데이터베이스는 최소한 하나 이상의 데이터 파일과 하나 이상의 로그 파일로 구성됩니다. 이러한 데이터베이스 관련 파일들은 확장자가 mdf(또는 ndf)와 ldf인 파일로 존재하게 됩니다.
데이터베이스는 데이터와 로그가 분리되어 저장됩니다. 확장자는 반드시 정해진 것이 아니고, 원하는 경우 바꿀 수도 있지만 되도록 그대로 사용하는 것이 좋습니다.
- 데이터 - mdf 또는 ndf 확장자
- 로그 - ldf 확장자
데이터 파일 (.mdf, .ndf)
모든 데이터베이스는 하나의 기본 데이터 파일을 갖게 되는데 이것이 mdf 확장자를 갖는 파일입니다. 또한 데이터베이스는 필요하다면 보조 데이터 파일이라고 불리는 ndf 확장자 파일을 가질 수 있습니다. 여기서 보조 데이터 파일은 데이터베이스를 만들 때 처음부터 존재하도록 할 수도 있고, 운영 중에 데이터베이스의 크기 증가나 다른 디스크에 분산해서 성능을 향상시키기 위한 목적으로도 사용할 수 있습니다.
로그파일 (.ldf)
모든 데이터베이스는 최소한 하나 이상의 트랜잭션 로그를 저장하기 위한 로그 파일을 갖습니다. 이 로그 파일의 기본 확장자가 ldf 입니다. 로그 파일을 통해 트랜잭션 로그를 관리하는 이유는 트랜잭션 로그가 있어야 시스템이 다운되는 예기치 않은 상황에서 데이터를 일관된 상태로 복구할 수 있고, 데이터가 손상되었을 때도 문제가 발생하기 직전의 상태로 데이터를 복구할 수 있기 때문입니다.
시스템이 재부팅되어 SQL Server 서비스가 재 시작된 상황이라 가정했을 때, 만일 완료된 트랜잭션에 대한 기록(커밋된 기록)이 트랜잭션 로그에는 남아 있으나 데이터 파일에는 반영되지 않았다면 그 로그를 근거로 하여 데이터 파일에 변경 내용을 반영합니다. 그 반대로 데이터 파일에는 일부 변경 내용이 반영이 되었으나 해당 트랜잭션이 완벽히 완료되지 못하고 시스템이 종료되면 데이터 파일에 이미 반영된 내용을 취소처리(롤백) 해줍니다.
페이지 (Page)
데이터는 8KB의 연속된 디스크 공간에 기록되는데 이것을 페이지라고 합니다. 결과적으로 데이터베이스는 1MB에 128개의 페이지를 저장할 수 있게 됩니다. 하나의 행은 기본적으로 여러 개의 페이지에 걸쳐 저장될 수 없고, 단 하나의 페이지에만 저장될 수 있습니다. 이로 인해서 하나의 데이터 행의 최대 크기는 8,060 바이트 입니다.
물론 이와 같은 행 크기 제한에 대한 예외는 존재합니다. varchar, nvarchar, varbinary, sql_variant 형 컬럼을 포함하는 행은 한 페이지(8KB)를 넘는 사이즈를 가질 수 있습니다. 단 개별 컬럼은 8KB를 넘을 수 없습니다. 그리고 varchar(max)와 같이 max 한정자를 사용하면, 해당 열에는 2GB 크기까지 데이터 저장이 가능합니다.
익스텐트 (Extents)
8KB 크기의 페이지 8개가 모여있는 단위를 익스텐트라고 합니다. 페이지가 읽기와 쓰기의 단위라고 한다면 익스텐트는 할당의 단위라 할 수 있습니다. 테이블이 만들어지고 데이터가 추가될 때 처음에는 8KB 크기의 페이지를 하나씩 하나씩 할당하지만, 이후에는 페이지 8개를 한번에 할당하여 데이터 저장을 위한 공간 할당이 효율적으로 이루어지게 됩니다.
'DB 기본 개념 다지기' 카테고리의 다른 글
데이터베이스 - 파일 그룹 (0) | 2023.06.30 |
---|---|
데이터베이스 만들기 - 개체탐색기 이용 또는 CREATE DATABASE 문 (0) | 2023.06.30 |
예제 데이터베이스 - AdventureWorks, WideWorldImpoters, Northwind (0) | 2023.06.28 |
시스템 데이터베이스 - master, model, tempdb,msdb, resource (0) | 2023.06.25 |
데이터베이스 분류 - OLTP, OLAP (0) | 2023.06.25 |