[ MSSQL ] 데이터의 물리적 구조
CREATE DATABASE TEST
'TEST' 데이터베이스 생성시
TEST라는 논리적 이름을 가진 물리적 파일이 존재하게 된다.
위 그림과 같이
*.mdf, *.ndf ( 데이터파일 ) : 실제 데이터들이 저장된다.
*.ldf : 로그파일이 저장된다.
로 구성된다.
데이터의 저장 구조를 살펴보면
위 그림과 같이 사용자는 SQL Server Management Studio 와 같은 인터페이스를 통하여 데이터파일과 로그파일에 데이터를 저장한다.
데이터 저장 시 데이터 파일은 로그파일과 다르게 순차적으로 저장되지 않는다.
데이터 파일은 Page(8KB) 라고 불리는 최소 저장 단위에 저장된다.
즉, 실제 내용인 행 데이터들은 각 페이지에 저장되는 것이다.
그리고 하나의 테이블이나 인덱스는 물리적으로 연속 8페이지로 구성된 Extend(64KB)에 저장된다.
헌데, 한 행의 크기가 8KB가 넘는 데이터들은 어떻게 페이지에 저장될까?
이 경우 SQLServer는 IAM(Index Allocation Map)이라 불리우는 페이지에 해당 데이터를 저장한다.
- IN_ROW_DATA : 힙 또는 인덱스의 파티션을 포함
- LOB_DATA : 데이터의 LOB(Large Object) 데이터 형식을 포함
- ROW_OVERFLOW_DATA : 8KB의 행 크기 제한을 초과한 가변 길이의 데이터를 포함
로그 파일은 Insert, Update 등 데이터를 변경하는 동작을 처리 할때 로그를 남긴다.
데이터가 변경될 때 데이터 파일에 변경된 데이터를 쓰고 성능이 저하됨에도 불구하고 로그파일에도 쓰는 이유는 무엇일까?
이유는 DBMS의 가장 근본적인 목적 중 하나인 데이터베이스의 무결성 때문이다.
즉, 트랜잭션 로그파일을 통해 잘못된 작업일 경우 Rollback tran을 선언하여 트랜잭션을 취소시켜 데이터를 작업 이전에 데이터로 보존 할 수 있다.
출처 : http://egloos.zum.com/sweeper/v/3003333
'프로그래밍 > 데이터베이스' 카테고리의 다른 글
NOSQL (322) | 2015.11.06 |
---|---|
[ MSSQL ] 데이터 파일(.mdf/.ndf)과 로그파일(.ldf) (4) | 2015.06.02 |
[ MSSQL ] Page와 Extend (4) | 2015.05.27 |
MSSQL vs MySQL vs Oracle (318) | 2015.04.10 |