관리 메뉴

Today is Present.

[펌] 그림으로 공부하는 오라클 구조 본문

DBMS - 오라클(Oracle)

[펌] 그림으로 공부하는 오라클 구조

MorningPhys 2023. 8. 19. 11:32

‘인덱스를 사용하는 것이 유리한 경우는 어째서 필요한 데이터가 전체 데이터의 15% 미만’이라고 하는 걸까?

그 이유는 시퀀셜 액세스와 랜덤 액세스의 특성에 있습니다. 테이블의 데이터가 대량이고 그중 한 개의 로우(행)를 꺼내야 한다면 당연히 인덱스를 통한 액세스가 빠릅니다.

그에 비해 모든 데이터를 보려고 할 때 매번 인덱스를 찾은 후 데이터를 찾아가면 오히려 속도가 느려집니다(색인을 일일이 찾아가면서 책의 내용 전체를 읽는 독자분은 안 계실 겁니다).

만약 데이터가 50%라면 어떨까요? 여기에서 중요한 점은 ‘디스크에서의 랜덤 액세스는 데 이터를 읽어오는 효율성이 시퀀셜 액세스보다 떨어진다’라는 특성입니다. 예를 들어, 테이 블에 2만 건인 데이터가 저장되어 있다고 하고 그중 절반인 1만 건을 꺼낸다고 가정하겠 습니다. 여기서 한 로우는 8KB입니다. 이때 지금까지 사용해 왔던 디스크의 성능을 기준으 로 계산해보면, 랜덤 액세스로 약 100초가 걸립니다(인덱스는 빈번하게 사용되고 있으므로 캐시 (cache)에 보관되어 있다고 가정합니다). 그것과 비교하면 2만 건 전부를 읽어오는 시퀀셜 액세 스로는 모든 데이터(2만 건)를 디스크에서 읽어온다고 해도 약 8초면 끝납니다. 즉, 디스크 특성상 모든 데이터가 아니더라도 일정 크기 이상의 데이터를 읽는다면 시퀀셜 액세스를 사 용하여 테이블을 풀 스캔하는 편이 빠릅니다.

단, 실제로는 캐시에 데이터가 보관된 경우도 있으며, 한 개의 블록에 여러 로우의 데이터가 보관되어 있어서 1회의 I/O로 많은 데이터를 읽을 수 있는 경우도 있습니다. 더욱이 인덱스 의 데이터를 디스크에서 읽어 와야 하는 경우도 있으므로 ‘15%가 임계치’라고 단순하게 말 할 수는 없습니다. 어디까지나 대략적인 기준 정도로만 생각하세요.

 

오라클은 여러 정보를 대량으로 보관하고 있습니다. 그중에는 I/O를 얼마만큼 수행했는지 에 대한 정보도 기록되어 있지만, 내용을 상세하게 살펴보면 헷갈리기 쉬운 부분들이 있습 니다.

예를 들어, 시퀀셜 액세스는 ‘db file scattered read’라고 표시되며, 랜덤 액세스는 ‘db file sequential read’라고 표시됩니다. ‘scattered’는 ‘분산됐다’라는 의미를 가지고 있으며, ‘sequential’은 ‘순차적인, 연속적인’이라는 의미를 가지고 있습니다. 액세스하는 방식을 생 각해보면 반대로 되어 있는 것이 아닌가라는 생각도 들지만, 표시가 잘못되어 있는 것은 아 니며 다음과 같은 의미가 있습니다.

오라클은 블록 단위로 데이터를 읽고 쓰며, 메모리에 배치해둡니다.

시퀀셜 액세스는 ‘순차로(순서대로) 읽는다’라는 의미로, 여러 블록을 한꺼번에 빠짐없이 읽어 옵니다. 이때 읽어온 여러 블록은 메모리상에 연속되지 않은(분산된) 형태로 놓입니다. 따라 서 ‘scattered’라고 표현합니다. 그에 반해 랜덤 액세스에서 읽어오는 데이터 블록은 한 번 에 한 개이며, 메모리 공간에 반드시 연속적으로 놓입니다. 따라서 ‘sequential’이라고 표현 합니다. 한번 읽어온 블록을 메모리에 어떻게 배치하는지에 따라 표현하는 방법을 다르게 한 것입니다.

저는 시퀀셜이라는 이름이 ‘시퀀셜 I/O’만을 의미하기를 원하지만, 이미 정해진 용어이기 때 문에 변경할 수는 없을 것입니다. 혼동하기 쉬운 부분이므로 여러분도 잘 기억해두시기 바 랍니다.

 

오라클 RAC 란? 

오라클을 배울 때 RAC라는 용어를 자주 접하지 않으셨는지요?

RAC란 Real Application Clusters의 약자로서, 오라클 클러스터웨어(Clusterware)를 활용 한 오라클 데이터베이스의 클러스터 기술을 말합니다. 간단하게 말하면 여러 개의 서버상에 가동된 인스턴스를 하나의 데이터베이스처럼 사용할 수 있습니다. 여러 개의 서버로 구성되 어 있지만 데이터의 일관성을 유지하기 위해 스토리지는 함께 사용합니다.

일반적으로 여러 대의 인스턴스로 구성한 것을 RAC 구성, 한 개의 인스턴스로 구성한 것을 싱글 구성이라고 부릅니다.

일반적인 HA(High Availability, 고가용성) 구성과 비교해서 RAC 구성이 가진 특징은 각 서버 가 액티브(active)/스탠바이(standby)가 아닌 액티브/액티브 구성이므로 서버의 CPU나 메모 리 같은 자원을 100% 활용할 수 있다는 점입니다. 즉, 두 대 이상의 저렴한 서버가 비싼 서 버 한 대 보다 강력하게 동작합니다. 그러므로 사용 가능한 자원이라면 모두 사용하는 것이 이득일 것입니다.

그리고 장애와 관련된 가용성 역시 향상됩니다. 한 개의 인스턴스에 장애가 발생하더라도 남은 인스턴스로 작업을 처리할 수 있기 때문에 지속적인 운영이 가능합니다.

 

오라클은 ‘블록’이라고 하는 단위로 데이터를 관리합니다.

I/O의 단위도 블록을 기반 으로 하고 있으며, 버퍼 캐시도 블록 단위로 관리하고 있습니다.

오라클의 데 이터는 수 바이트에서 수천 바이트 이상의 여러 ‘로우(행)’로 존재하므로, 오라클 역시 블록이라고 하는 정리용 상자를 준비해서 보관하는 것입니다.

블록 크기는 2KB, 4KB, 8KB, 16KB, 32KB 중에서 선택할 수 있습니다. 데 이터와 캐시의 크기가 커짐에 따라 최근 시스템에서는 8KB를 채용하는 일이 많아졌습 니다. 단, 크기가 큰 테이블을 시퀀셜 액세스로 읽어 와야 하는 DW(Data Warehouse, 데이터 웨어하우스) 등에는 16KB나 32KB 같은 크기를 선택할 때도 있습니다.

 

오라클의 성능 진단 도구

스태츠팩은 오라클 표준 성능 진단 도구입니다. 스태츠팩은 오라클 8i 이상 버전에서 설치 할 수 있으며, 성능 정보를 수집합니다. 예를 들어, 자원을 대량으로 소비하는 SQL문을 특정 하거나 캐시 히트율을 확인하는 것으로 병목 현상을 구분할 수 있습니다.

또한, 오라클 10g 이상부터는 스태츠팩을 진화시킨 AWR(Automatic Workload Repository)이 라는 기능을 사용할 수 있습니다. AWR은 설치할 필요가 없으며, 스태츠팩으로는 수집할 수 없는 통계 정보와 관련된 분석도 수행됩니다. 다만, AWR을 사용하기 위해서는 Diagnostics Pack 라이선스가 필요합니다.

 

오라클 기동명령어 입력

sqlplus /nolog

SQL> connect /as sysdba

SQL> startup nomount

SQL> 

SQL> alter database mount;

SQL> alter database open;

 

or

 

SQL> startup

ORACLE instance started.

Total System Globa Area

Fixed Size

Variable Size

Database Buffers

Redo Buffers

DataBase mounted.

Database opened.

SQL>

 

컨틀롤 파일이 손상되었을 때는 MOUNT할 수 없습니다. 

즉, NOMOUNT 상태에서 컨트롤 파일을 생성하는 명령어를 실행해야 합니다. 

 

 

728x90
반응형