DBMS는 데이터를 처리하는 소프트웨어다.
=> 즉 데이터를 보관하고 있는 장소(?)인 기억장치(메모리, 디스크, 캐시 등 하드웨어 자원)와 DBMS가 어떻게 상호작용하느냐에 의해 실제 성능이 크게 좌우된다.
이후 공부하게 될 대부분의 성능 문제들이 결국 DBMS가 메모리나 디스크를 어떻게 사용하는지와 관련이 있기 때문에, ‘DBMS와 기억장치의 관계’를 먼저 이해하는 과정이 필요하다.
예를 들어 쿼리가 느린 이유가 디스크를 너무 많이 읽어서인지, 메모리에 데이터가 없어서인지, 임시 파일을 만들어 정렬하고 있어서인지 등을 알려면 DBMS가 어떤 데이터를 메모리에 올리고, 언제 디스크를 사용하는지를 먼저 이해해야 제대로 판단할 수 있다.
그래서 지금은 1번을 공부하는 것이다.
1. DBMS는 데이터를 어디서 어떻게 읽고 쓰는가? → 메모리(버퍼), 디스크(저장소), 캐시, 임시 영역 등
2. 이 구조가 쿼리 실행에 어떤 영향을 주는가? → 메모리 적중률, 디스크 I/O, 정렬/조인 방식 등
3 따라서 쿼리를 어떻게 짜야 자원을 효율적으로 쓰는가? → 필요한 컬럼만 조회, 조인 순서 조정, 조건 필터 최적화 등
기억장치
디스크(HDD/SSD)
메모리
DBMS가 사용하는 메모리 영역 3가지
1) 데이터 캐시
데이터 유지하기 위해 사용하는 영역
2) 로그 버퍼
데이터 갱신 처리(읽고 쓰기)를 임시 저장하는 영역
3) 워킹 메모리
데이터 정렬 또는 해시 관련 처리에 사용되는 작업용 영역
→ 정렬은 ORDER BY 구, 집합 연산, 윈도우 함수 등의 기능을 사용할 때 실행된다.
→ 해시는 주로 테이블 등의 결합에서 해시 결합이 사용될 때 실행된다.
- 워킹 메모리 영역은 SQL에서 정렬 또는 해시가 필요한 때 사용되며, 종료되면 해제되는 임시 영역이다.
- 일반적으로 데이터 캐시와 로그 버퍼와는 다른 영역으로 관리되는 경우가 많다.
- 이 영역이 성능적으로 중요한 이유는 만약 이 영역이 '다루려는 데이터양'보다 작아서 사용할 영역이 부족해지는 경우, 대부분의 DBMS는 저장소(디스크)를 사용하기 때문이다. 디스크는 데이터 접근 속도가 메모리에 비해 굉장히 느리기 때문에 디스크를 사용하게 되면 당연히 전체적인 속도가 느려질 수 밖에 없다.
기억장치 관련 트레이드오프
1. 기억장치는 '기억비용'과 '데이터 접근 속도'라는 두 측면에서 트레이드오프가 발생
→ 기억비용이 높으면 접근 속도가 빠르고
→ 기억비용이 낮으면 접근 속도가 느리다.
2. 메모리의 휘발성이라는 성질로 인해 발생하는 트레이드오프
메모리는 휘발성이라서 -> 데이터 갱신 시 동기 접근 여부에 따라 트레이드 오프가 발생한다. (로그 버퍼에 해당하는 내용)
→ 동기처리를 하면 장애 발생하더라도 데이터가 사라지지 않으니 -> 데이터 정합성은 유지 but 속도가 느려짐.
→ 동기처리를 하지 않으면 장애 발생 시 데이터가 사라져 버리니 -> 데이터 정합성은 유지 어렵지만 속도는 빠름.
3. 한정적인 리소스로 인해 발생하는 트레이드오프
검색과 갱신중 어떤 처리 시 메모리를 더 많이 할당하도록 할까?
메모리는 한정적인 자원이다. 그래서 어떤 처리에 더 많은 메모리 영역을 할당하냐에 따라 다른 처리 시 할당할 수 있는 메모리 영역은 줄어들기 마련.
'데이터 처리 도구 > SQL' 카테고리의 다른 글
| SQL에서 날짜 데이터 타입 차이 (DATETIME vs. TIMESTAMP) (0) | 2025.07.17 |
|---|---|
| SQL 성능 향상을 위한 공부: 1-3) 쿼리 평가엔진에 대하여 (0) | 2025.07.11 |
| SQL 성능 향상을 위한 공부: 1-1) DBMS 아키텍처 이해하기 (0) | 2025.07.01 |
| SQL 사용 시 성능도 고려해야 하는 이유 (0) | 2025.06.23 |
| [SQL] MEDIAN() 없이 중앙값 구하기 (0) | 2025.05.22 |