-
[DBMS] Disk and Disk Space Management개발 이야기/DB(데이터베이스) 2024. 11. 22. 22:36
본 내용은 한양대학교 차재혁 교수님의 DBMS 강의를 기반으로 작성되었습니다.
Big Picture: Architecture of a DBMS
SQL은 어떻게 작동하는가? 실제 DBMS의 구조를 보면 다음과 같다.
우선. SQL client단은 앞서 배운 것처럼, 사용자 또는 응용프로그램이 데이터베이스와 상호작용하기 위해 사용하는 인터페이스라고 생각하면된다. 즉, SQL쿼리를 통해 DBMS와 상호작용하는 공간이다.
이후 Qeury parsing & optimization에서는 SQL 구문이 유효환지 검증하고, 내부 데이터 베이스 명령어로 변환한다, optimization의 경우 쿼리가 어떻게 하면 최적으로 효율적으로 데이터에 접근할지 선택하게 도와준다.
Relational operator의 경우 데이터를 처리하고 변환하기 위해 레코드와 파일에서 작업을 수행한다. 즉, data flow를 수행하며 Join gorup by, slection등의 연산을 처리한다.
Files and Index Management에서는 데이터를 저장하고 검색하기 위한 테이블과 인덱스를 관리하며, 이들을 효율적으로 구성하여 데이터의 접근속도를 높인다. 이들에 관해서는 차후 자세히 알아볼 예정이다.
Buffer management는 디스크 I/O 작업을 최소화하기 위해 캐싱을 통해 성능을 최적화한다, 즉, illusion of operating in memory를 수행한다.
마지막으로 Disk space management에서는 실제 데이터 페이지와 디스크의 물리적 블록을 맵핑하며, 데이터가 저장될 위치를 관리하고 공간을 할당/배제한다. 즉, page의 요청을 pysical bytes에 할당하며 디스크의 공간을 관리한다.
저장공간 분류
컴퓨터에서 저장공간은 크게 휘발성 저장 공간과 비휘발성 저장공간으로 나뉘어진다, 휘발성 저장공간은 문자 그대로 전원공급이 차단되면 가지고 있는 데이터가 모두 사라지지만, 전송속도가 빠르다. 위에서 말한 memory hallucination이 필요한 이유이다.
휘발성 저장공간은 RAM으로 대표되며, 메모리라고도 불린다.
비휘발성저장공간은 전원공급이 꺼진 이후에도 데이터가 유지되며, HDD, disk/ SSD가 대표적이다. DB의 경우 그 정보를 저장하는 것이 중요하기에 비휘발성 저장공간이 중요하다.
위의 그림을 통해 데이터 저장공간의 크기와 속도의 상관관계를 대략적으로 파악 가능할 것이다.
DISK
디스크는 흔히 말하는 magnetic disk를 말한다. 즉, CD 모양처럼 생겨서 빙글빙글 돌아가는 아래의 그림과 같은 것이다.
이러한 디스크는 platter가 중심이여, 이 플레터에 데이터가 저장된다. platter는 트랙과 섹터로 다시 나누어진다. 이들은 저장공간의 단위를 의미한다. 실린더는 여러 platter에서 동일한 위치에 있는 트랙들의 집합을 의미한다.
데이터를 읽고, 쓰기 위해 platter가 회전하고, 또 Arm을 통해 일기/쓰기 헤드가 트랙으로 이동하며 데이터를 읽어온다.
Disk page에 접근하는 과정을 크게 3가지로 구분하여 I/O cost와 access time을 대략적으로 계산할 수 있다.
이는 seek time, rotaional delay, transfer time으로 구분가능하다.
우선 Seek time은 디스크 헤드가 원하는 track으로 이동하는 시간으로 2~3ms가 일반적으로 소요된다.
Rotational dealy time은 디스크가 회전하여 원하는 섹터가 헤드 아래에 도달하는 시간으로 이는 디스크의 회전속도에 따라 달라진다. 마지막으로 전송시간은 데이터가 디스크에서 메모리로 이동되는데 걸리는 시간으로 페이지 크기에 따라 달라진다.
SSD
Flash memory를 기반으로 데이터를 저장하는 SSD는 HDD와 다르게 기계적인 부품을 사용하지 않는다. 데이터는 전기적 신호로 기록되고 삭제되며, 읽기와 쓰기가 각각 독립적으로 작동한다.
읽기는 빠르고 일정한 속도를 제공하나 쓰기의 경우 읽기에 비해 다소 느리다( 500MB/s 이상, 순차적 읽기: 약 525MB/s 이상. 랜덤 쓰기는 약 120MB/s, 순차적 쓰기는 약 480MB/s. 물론 HDD에 비해 매우우우~~ 빠르다, 단위가 다르다!)
즉, 장점으로 빠른 접근 속도: HDD보다 최대 10~100배 빠른 랜덤 데이터 접근, 기계적 부품이 없기 때문에 물리적인 내구성이 높고 충격에 강하다는 점과 낮은 전력 소비를 가진다.,
반면 SSD는 말한 것처럼 쓰기 작업이 읽기보다 느리다. 이는, SSD의 쓰기 증폭(Write amplification) 현상에서 기인한다.
Write amplificaton, WA란, 플래시 메모리 및 SSD에서 새 데이터의 양에 따라 실제로 필요한 것보다 훨씬 더 많은 부분의 플래시를 삭제하고 다시 작성해야하기에 일어나는 현상이다. 이는 SSD가 데이터를 블록단위로 묶어서 사용하며 삭제를 해당 단위로 해야하기 때문이다(대용량 블록을 정리(가비지 컬렉션)하고 재배치함). NAND 플래시는 결국 데이터 삭제 없이 덮어쓰기가 불가능하다.
이는 블록의 내구성문제로 이어진다.
이러한 특성들 때문에 소규모 데이터베이스이거나 데이터 접근속도가 중요한(실시간 분석, 고속응답) 경우 SSD를 대규모 데이터 처리에는 HDD가 선호된다.
Locality
데이터가 물리적으로 가까운 위치에 저장되어있으면, 당연하게도 읽기/쓰기 속도가 빨라지는데 이를 locality 현상이라고 한다.
디스크에서는 기계적인 부품에 의존하여 실제로 물리적으로 데이터에 적븐해야하기에, 멀리 떨어진 블록의 경우 접근에 탐색지연과, 회전 지연이 발생하여 성능이 느려지게 죈다.
SSD에서는 디스크와 달리 기계적인 부품이 없지만, 앞서 말한 Write Amplication, 쓰기 증폭현상으로 인해, 다시말해 블록 단위로 데이터가 처리되기 때문에 로컬리티가 여전히 중요하다.
Disk space management
앞서 살펴본것 처럼, 대다수 DBMS는 Disk와 SSD에 정보를 저장한다.
데이터를 읽거나 쓸때, Large Chunks of Sequential bytes, 즉 큰 연속된 덩어리 형태로 한번에 처리하는 것이 효율적이다. 이는 디스크에서 locality 특성으로 인해 기인한다.
if you’re going all the way to Pluto, pack the spaceship full!
즉, 탐색비용을 최대한 활용하여 한번에 처리하는 것이 중요하다. 이를 위해 미래의 데이터 접근을 예측하여 pre-fatch하거나 Cache하는 전략을 사용할 수 있다(혹은 연속된 블럭을 buffer에 올리거나).
결국 Disk space management는
- 데이터베이스 시스템(DBMS)의 가장 낮은 계층으로, 디스크 상의 데이터 저장 및 읽기를 관리.
- 페이지 단위로 데이터를 처리하며, 물리적 디스크의 위치와 논리적 데이터 구조를 연결.
- 요청된 페이지를 디스크에서 메모리로 로드하거나 변경된 데이터를 다시 디스크로 저장
하는 기능을 하면서 이를 효율적으로 기능하기 위해 locality를 잘 살리고 미래의 데이터 접근을 최적화하는 다양한 방법을 갈구한다.
Block & Page
Block이란 disk에서 읽거나 쓰는 단위로, 현대에는 64kb ~ 128kb를 대부분 사용한다.
Page의 경우 블록 크기와 거의 유사한 의미로 사용되는 데이터 단위로, 일부에서는 a block-sized chunk of RAM, 즉 메모리 단에서 데이터 단위로 얘기하나, 내가 들은 강의에서는 이 둘을 엄격히 구분하지는 않는다.
Block의 Size가 증가하면, disk space의 활용도가 떨어지고, 반대로 size가 감소하면 data의 transfer의 속도가 감소한다. 즉 size의 증/감소는 space effiecency와 time efficency와 연관되며 이 둘은 역비례한다.
결국 적절한 지점을 찾는 것이 중요하다. 일반적으로 512바이트(기본값), 1KB(UNIX), 4KB(Linux 3.x~5.x).를 사용한다.
Free block management
디스크의 빈공간을 관리하는 방법은 아래의 2가지 방법이 있다.
- 연결 리스트(Linked List):
- 각 블록이 사용 가능한 블록 번호를 저장.
- 단점: 검색 속도가 느림.
- 비트맵(Bit-map):
- 각 블록의 사용 여부를 비트(1 또는 0)로 표시.
- 장점: 메모리에서 효율적으로 관리 가능.
- 단점: 비트맵 크기가 커질 경우 메모리 사용량 증가.
Relationship with File system 2 way
파일 시스템 위에서 동작하는 방법과 storgae device를 직접 다루는 2가지 접근법이 존재가능하다.
물론 직접 다룬다면 디바이스에 관해 매우 잘 안다면 매우 좋은 성능을 확보할 수 있을 것이다.
다만, 파일 시스템위에서 작동하면 DBMS는 파일 시스템 상에 대규모 연속 파일을 생성하여 관리하고 파일 시스템은 연속 데이터 접근 속도를 최적화하여 DBMS는 디스크의 물리적 세부 사항을 신경 쓰지 않고 파일 시스템이 제공하는 데이터 구조 최적화를 이용가능하다.
정리하면 Disk space management는 가장 밑단에서 데이터베이스의 실제 물리적인 저장공간을 효율적으로 사용할 수 있게 지원해주는 부분으로 이를 위해 1. 빈공간을 잘 관리하고 2. 자주 사용되는 데이터를 관리하고 3.연속적으로 데이터를 잘 저장함으로 성능의 최적화를 추구한다.
'개발 이야기 > DB(데이터베이스)' 카테고리의 다른 글
[DBMS] Data Representations: Files, Pages,Records (0) 2024.11.24 [DBMS] Buffer Management (0) 2024.11.23 [DB] SQL2: SELECT와 Relational Algebra 중심으로(조회) (2) 2024.10.19 [DBMS] SQL1 - Schema definition & Update & Insert 위주로 (0) 2024.10.18 [DB][실습] PostgreSQL 설치 및 Query사용법 (2) 2024.10.18