본문 바로가기

DataBase/SQL

SQL_lv ) DBMS와 버퍼

 

기억장치의 계층

 

1.DBMS와 기억장치의 관계

 

-하드디스크(HDD)

하드디스크는 2차 기억장치로 분류.

2차 기억장치는 그렇게 좋은 장점도 없지만, 그렇게 나쁜 단점도 없는 매체이다.(평균)

DB 대부분의 시스템에서 범용적으로 사용되는 미들웨어이므로, 어떤 상황(관점) 에서도 평균적인 수치를 가지는 매체를 선택하는 것이 자연스럽다.

 

그렇다고 DBMS가 데이터를 디스크 이외의 장소에 저장하지 않는다는 뜻은 아니다.

오히려 일반적인 DBMS는 항상 디스크 이외의 장소에도 데이터를 올려 놓는다.

바로 1차 계층의 기억장치 메모리에 말이다.

 

 

-메모리

기억 비용이 굉장히 비싸다.

하드웨어 1대에 탑재할 수 있는 양이 크지 않다.

따라서 규모 잇는 상용 시스템의 데이터베이스 내부 데이터를 모두 메모리에 올리는 것은 불가능하다.

 

 

-버퍼를 활용한 속도 향상

성능 향상을 목적으로 데이터를 저장하는 메모리를 버퍼(buffer) 또는 캐시(cache)라고 부른다.

이러한 고속 접근이 가능한 버퍼에 '데이터를 어떻게, 어느 정도의 기간 동안 올릴지'를 관리하는 것이 DBMS의 버퍼 매니저입니다.

버퍼 매니저는 DB 성능에 굉장히 중요한 영향을 끼친다.

 

 

2.데이터 캐시와 로그 버퍼

 

-데이터 캐시

디스크에 있는 데이터의 일부를 메모리에 유지하기 위해 사용하는 메모리 영역이다.

찾는 데이터가 데이터 캐시에 있다면 디스크에 접근하지 않고 처리가 수행되므로 굉장히 빠르게 응답한다.

반대로 데이터가 캐시에 없다면 디스크에 접근해야 되므로 응답 속도가 느려진다.

 

 

-로그 버퍼

갱신 처리(INSERT, DELETE, UPDATE, MERGE)와 관련 있다.

DBMS는 갱신과 관련된 SQL 구문을 사용자라부터 받으면, 곧바로 저장소에 있는 데이터를 변경하지 않는다.

일단 로그 버퍼 웨이 변경 정보를 보내고 이후 디스크에 변경을 수행한다.(비동기 처리)

 

DBMS가 이러한 시점 차이를 두는 이유는 성능을 높이기 위해서이다.

 

한 번 메모리에 갱신 정보를 받은 시점에서 사용자에게는 해당 SQL 구문이 '끝났다'라고 통지하고, 내부적으로 관련된 처리를 계속 수행한다.

 

 

3.트레이드오프 (메모리)

 

-휘발성

메모리에는 데이터의 영속성이 없다.

하드웨어의 전원을 꺼버리면 메모리 위에 올라가 있는 모든 데이터가 사라져 버린다. 이러한 성질을 휘발성 이라고 부른다.

 

DBMS를 껏다 켜면 버퍼 위의 모든 데이터가 사라진다. 

 

-휘발성의 문제점

가장 큰 문제점은 장애가 발생했을 때 메모리에 잇던 데이터가 모두 사라져버리 데이터 부정합을 발생시키는 것이다.

데이터 캐시라면 장애로 인해 메모리 위의 데이터가 사라져도, 원본 데이터는 디스크에 있으므로 문제가 없다.

하지만 로그 버퍼 위에 존재하는 데이터가 디스크 위의 로그 파일에 반영되기 전에 장애가 발생해서 사라져버린다면 해당 데이터가 완전히 사라져서 복구조차 불가능해질 것이다.

 

이를 회피하고자 DBMS는 커밋 시점에 반드시 갱신 정보를 로그 파일에 씀으로써, 장애가 발생해도 정합성을 유지할 수 있게 한다.

 

 

4.트레이드오프 (시스템)

 

-데이터 캐시와 로그 버퍼의 크기

데이터 캐시와 로그 버퍼를 비교해보면 데이터 캐시에 비해 로그 버퍼의 초깃값이 굉장히 작다.

이는 데이터베이스가 기본적으로 검색을 메인으로 처리한다고 가정하기 때문이다.

갱신 처리에 값비산 메모리를 많이 사용하는 것보다는, 자주 검색하는 데이터를 캐시에 올려놓는 것이 좋다고 생각하는 것이다.

 

 

5. 워킹 메모리

 

-언제 사용될까?

DBMS는 앞에서 설명했던 2개의 버퍼 이외에도, 일반적으로 메모리 영역을 하나 더 가지고 있다.

이는 정렬 또는 해시 관련 처리에 사용되는 작업용 영역으로 워킹 메모리(working memory)라고 부른다.

 

이 영역이 성능적으로 중요한 이유는, 만약 이 영영이 다루려는 데이터양보다 작아 부족해지는 경우가 생기면 대부분의 DBMS가 저장소를 사용하기 때문이다.

 

-부족해지면?

전체적인 속도가 느려진다.

메모리가 부족해지는 순간 갑자기 느려지는 순간적인 변화가 일어나는 것이 문제이다.

 

 

 

 

 

 

 

 

 

 

참고 서적

 

'DataBase > SQL' 카테고리의 다른 글

SQL_LV ) 실행 계획이 SQL 구문의 성능을 결정  (0) 2020.07.04
SQL_LV ) DBMS와 실행 계획  (0) 2020.07.03
SQL 뷰  (0) 2020.06.29
Sql 인덱스  (0) 2020.06.29
서브쿼리  (0) 2020.06.24