[SQL] DBMS 아키텍처 Part 1
해당 자료는 지은이 미크의 SQL 레벨업 책을 보며 정리한 자료 입니다.

DBMS 아키텍처 란?

우리가 주로 봐야할 부분은 DBMS 부분 입니다.
1. 쿼리 평가 엔진
쿼리 평가 엔진은 계회을 세우고 실행하는 DBMS의 핵심 과정
데이터에 접근 하는 방법을 "접근 메소드(access method)"라고 합니다.
2. 버퍼 메니저
특별한 용도로 사용하는 메묄 영역을 확보합니다.
3. 디스크 용량 매니저
어디에 어떻게 데이터를 저장할지를 관리하며, 데이터의 읽고 쓰기를 제어합니다.
4. 트랜잭션 매니저와 락 매니저
트랜잭션의 정합성을 유지하면서 실행시키고, 필요한 경우 데이터에 락을 걸어 다른 사람의 요청을 대기시키는 것이 트랜잭션 매니져와 락 매니저의 역활
5. 리커버리 매니저
데이터를 정기적으로 백업하고, 문제가 일어났을 때 복구해줘야 하는데 이러한 기능을 수행 하는 것이 리커리 매니저 입니다.
DBMS 버퍼란?
요즘 같이 개나소나 빅데이터라는 단어를 들어본 시대라면 DB안에 데이터가 얼마나 많이 들어 오는지 알 수 있을 겁니다.
하드웨어도 발달을 했지만(매모리 관련) 데이터가 들어오는 양이 어마어마 하죠.
기억비용 줄이기 = 접근 속도 UP = 버퍼

- 보조기억 장치(HDD)
DBMS가 데이터를 저장하는 매체는 대부분 HDD입니다.
- 주기억 장치(매모리)
HDD보다 속도가 빠른 대신 비용이 비쌉니다.
DBMS가 일부라도 데이터를 메모리에 올리는 것은 성능 향상 때문 입니다.
즉 SQL구문의 실행 속도를 빠르게 만들기 위함이죠
성능 향상을 목적으로 데이터를 저장하는 매모리를 버퍼(Buffer) 또는 캐시(cache)라고 부릅니다.
이러한 고속 접근이 가능한 버퍼에 `데이터를 어떻게. 어느 정도의 기간 동안 올릴지`를 관리하는 것이 DBMS의 버퍼 매니저입니다.
메모리 위의 2개의 버퍼
1. 데이터 캐시
데이터 캐시는 디시크에 있는 데이터 일부를 메모리에 유지하기 위해 사용하는 영역입니다.
우리가 입력하는 SELECT 구문을 가지고 있습니다.
2. 로그 버퍼
로그 버퍼는 갱신 처리(INSERT, DELETE, UPDATE, MERGE)와 관련 있습니다.
결국 DBMS는 `저장소의 느림을 어떻게 보완할 것이가`를 계속 고민해온 미들웨어란 뜻입니다.

그 밖의 매모리의 문제점
- 휘발성
휘발성이란 : 하드웨어의 전원을 꺼버리면 메모리 위에 올라가 있는 모든 데이터가 사라져 버리는 현상을 이야기 합니다.
DBMS에서도 이러한 장애가 발생해도 정합성을 유지할 수 있게 하는 커밋(commit)이 있습니다.
커밋(commit)이란 `갱신 처리를 확정`하는 것이라고 볼 수 있습니다.
데이터 캐시와 로그 버퍼의 크기 차이
데이터 캐시와 로그 버퍼의 크기는 DBMS에 따라 다르지만 공동된 특성이 있습니다.
그것은 바로 데이터 캐시에 비해 로그 버퍼의 초기값이 굉장히 작다는 것입니다.
왜 그럴까요?
이는 데이터베이스가 기본적으로 검색을 메인으로 처리한다고 가정하고 있기 때문인데요
갱신 처리에 값비산 메모리를 많이 사용하는 것보다는, 자주 검색하는 데이터를 캐시에 올려 놓자 라는 생각을 가지고 있는거 같습니다.
만약 만드는 제품이 검색에 비해 갱신이 많다면 초기설정을 바꿔주는 방식으로 튜닝을 고려해봐야 합니다.
추가적인 매모리 영역 "워킹 매모리"
정렬 또는 해시 관련 처리에 사용되는 작업 공간을 "워킹 매모리(working memory) 라고 부릅니다.
즉 ORDER BY , GROUP BY, 해시를 사용할 때 사용하는 영역 이죠

워킹 매모리가 부족할 때 사용하는 임시적인 영역을 DBMS마다 이름이 다릅니다.
Oracle : 임시 테이블 스페이스(TEMP Tablespace)
MSSQL : TEMPDB
PostgreSQL : 일시 영역(pgsql_tmp)