Database
[Oracle Tunning] 오라클 아키텍쳐
춘햄
2024. 8. 28. 10:21
요즘 회사에서 오라클 DB 성능 튜닝에 대한 공부를 좀 하고 있는데, Obsidian만 사용하다가 유기된 블로그도 좀 살릴 겸.. 여기에도 정리를 해보려고 한다.
간단하게 오라클 DB의 데이터 저장 구조와 SELECT 문을 실행했을 때 어떤 순서로 쿼리를 수행하는 지 먼저 알아보고 넘어가자.
오라클 아키텍처의 데이터 저장 구조
오라클 데이터베이스의 데이터 저장 구조는 물리적 구조와 논리적 구조로 나뉜다.
물리적 구조:
- 데이터 파일 (Data Files): 실제 데이터가 저장되는 파일이다. 테이블의 데이터, 인덱스, 블록 등이 이 파일에 저장된다.
- 컨트롤 파일 (Control Files): 데이터베이스의 상태와 구조를 관리하는 파일이다. 데이터 파일과 리두 로그 파일의 위치 정보, 데이터베이스 이름, 백업 정보 등이 이 파일에 저장된다.
- 리두 로그 파일 (Redo Log Files): 데이터베이스의 변경사항을 기록하는 파일이다. 장애가 발생할 경우, 이 로그를 이용해 데이터를 복구할 수 있다.
- 아카이브 리두 로그 파일 (Archived Redo Log Files): 리두 로그 파일이 다 차면 그 내용을 보존하기 위해 저장하는 파일이다. 이를 통해 장기 보관이 가능하다.
- 파라미터 파일 (Parameter Files): 데이터베이스의 초기화 파라미터가 저장되는 파일이다. 이 파일을 통해 데이터베이스의 설정을 관리한다.
- 패스워드 파일 (Password Files): 데이터베이스 관리자 인증에 필요한 파일이다. 이 파일이 있어야 관리자가 데이터베이스에 접근할 수 있다.
논리적 구조:
- 테이블스페이스 (Tablespaces): 데이터베이스의 논리적 저장 단위로, 하나 이상의 데이터 파일로 구성된다. 테이블과 인덱스 등을 그룹화하여 관리한다.
- 섹션 (Segments): 테이블스페이스 내에서 데이터를 저장하는 논리적 단위이다. 테이블, 인덱스 등이 섹션으로 저장된다.
- 익스텐트 (Extents): 섹션을 구성하는 데이터 저장 공간의 연속적인 블록 그룹이다. 익스텐트는 블록으로 이루어져 있다.
- 블록 (Blocks): 데이터 저장의 최소 단위이다. 하나의 익스텐트는 여러 개의 블록으로 구성된다. 기본 단위는 8kb이지만 설정에서 셋팅이 가능하다.
논리적 구조를 그림으로 나타내면 아래와 같다.
SELECT 문의 논리적 실행 순서
오라클에서 SELECT 문이 실행되는 순서는 다음과 같다:
- FROM: 데이터를 조회할 테이블이나 뷰를 지정하는 단계이다. 이 단계에서 JOIN이 포함된 경우, 두 테이블 간의 결합이 먼저 수행된다.
- WHERE: 지정된 조건에 맞는 데이터를 필터링하는 단계이다. 이 절을 통해 쿼리에서 필요한 행이 선택된다.
- GROUP BY: 데이터를 특정 컬럼 기준으로 그룹화하는 단계이다. 이 단계에서 데이터를 집계하여 요약된 결과를 얻을 수 있다.
- HAVING: 그룹화된 데이터에 추가 조건을 적용하여 필터링하는 단계이다. WHERE 절이 개별 행에 적용된다면, HAVING 절은 그룹에 적용된다.
- SELECT: SELECT 절에 명시된 컬럼이나 표현식을 선택하여 최종 결과를 반환하는 단계이다.
- ORDER BY: 선택된 데이터를 특정 기준에 따라 정렬하는 단계이다. 이 절을 통해 출력되는 데이터의 순서를 지정할 수 있다.
- LIMIT/OFFSET: 반환할 데이터의 범위를 지정하는 단계이다. 특정 개수의 행만 반환하거나, 특정 위치부터 데이터를 반환하도록 한다. (오라클에서는 ROWNUM 또는 FETCH FIRST 등의 문법을 사용한다.)