두개의 버퍼

박주윤·2022년 11월 22일
0

DBMS 버퍼 매니저

목록 보기
2/2

DBMS가 사용하는 메모리는 크게 보면 두가지가 있다.
데이터 캐시와 로그 버퍼

대부분의 DBMS는 이걸 갖고 있다.
또한 사용자가 용도에 맞게 크기를 변경하는 것이 가능하다.

1. 데이터 캐시

데이터캐시는 데이터를 메모리에 유지하기 위해 사용하는 메모리이다.
만약 SELECT을 했는데 원하는 데이터가 데이터캐시에 있다?
디스크에 가지 않으니 굉장히 빠르게 수행된다.
반대의 경우 당연히 응답속도가 느려진다.

SQL SERVER 에서는 이를 버퍼캐시 적중률이라고 표현한다.
값이 90일 경우 요청한 데이터의 90%가 데이터 캐시에 있다는 뜻이다.
SQL SERVER의 가이드 문서에는 90 이상이 바람직하다고 한다.
아래의 쿼리로 현재 데이터베이스의 버퍼 캐시 적중률을 확인할 수 있다.

SELECT * FROM sys.dm_os_performance_counters
WHERE counter_name LIKE '%hit ratio%';

2. 로그 버퍼

로그 버퍼는 insert,update,delete,merge 등의 데이터 갱신과 관련이 있다.
DBMS는 위의 데이터 갱신구문을 받으면 곧바로 저장소의 데이터를 변경하는 것이 아니다. 일단, 로그버퍼 위에 데이터 변경 정보를 보내고 이후 디스크에서 데이터를 변경한다.(비동기 처리)

간단하게 생각하면 그냥 바로 바꾸면 되는거 아니냐? 라는 생각이 들지만 DBMS가 이렇게 하는 이유는 메모리를 쓰는 이유와 같다. 성능 때문이다.

저장소에 접근할때 시간이 걸리는 것은 SELECT에서만이 아니다. 만약 수많은 데이터를 추가, 변경하고 다음 구문을 수행할 때 까지 그 중간의 시간을 줄이기 위해 비동기 처리를 한다. 실제 우리는 구문을 처리했다는 내용을 통보받지만, 그 안에서는 관련 처리를 계속 수행하는 것이다.

결국 속도

위의 두개의 버퍼가 어떤것인지 알고 나면 결국 DBMS는 느린 저장소를 어떻게 보완하느냐를 고민하는 미들웨어(Middle ware)이다. 현실적으로 메모리에 모든 데이터를 저장할 수 없으니 위의 메커니즘을 활용해서 속도를 최대한 보장하는 것이다.

0개의 댓글