📌 1장에서는 오라클의 기본 기능을 이해하기 위한 오라클 필수 키워드를 선정하고
이것을 토대로 I/O(Input, Output, 입출력)와 디스크의 관계를 자세하게 설명합니다.
1.1 | 오라클을 이해하기 위한 필수 키워드
① 병렬 처리를 가능케 하고 높은 처리량을 실현한다.
② 응답 시간(response time)을 중시한다.
③ 커밋(COMMIT)한 데이터는 지킨다.
오라클을 포함한 모든 DBMS(Database Management System, 데이터베이스 관리 시스템)의 내부 구조는
매우 복잡하다. DBMS가 복잡해지는 이유는 위 세가지 특성을 모두 충족시켜야 하기 때문임.
이 세 가지 특성은 상반된 성향이 있어서 동시에 모두 만족시키기가 매우 어려움.
예를 들어, ③ '커밋(COMMIT)한 데이터는 지킨다'를 만족하기 위해 커밋하는 순간 데이터를 디스크에 기록하고 싶지만 그렇게 하면 응답시간이 나빠지게 되고, ⓛ '병렬 처리를 가능케 하고 높은 처리량을 실현한다'는 것도 병렬처리할 때는 모순되는 처리가 발생하지 않도록 'Lock'이 필요하며, 그로 인해 성능이 저하되는 경우도 발생.
1.2 | 오라클과 디스크(하드디스크)
· 오라클은 DBMS이며, 오라클의 관점에서 데이터베이스는 오라클이 디스크에 저장하고 관리하는 데이터.
· 오라클은 디스크에서 데이터를 읽어오고, 필요한 처리를 한 후 다시 디스크에 기록함. 즉, 오라클이 다루는 데이터는 디스크에서 꺼내오고 다시 디스크로 돌아감(오라클과 디스크는 떼려야 뗄 수 없는 관계).
1.3 | 디스크의 동작
· 데이터를 읽기(또는 기록하기)위해서는 원하는 데이터가 저장되기 시작한 첫머리를 반드시 찾아야 함. 이렇게 원하는 위치를 찾는 작업을 디스크 용어로 '탐색(seek, 시크)'이라고 함.
· 그 후에 디스크에서 원하는 정보를 읽을 수 있는 위치가 회전해서 다가올 때까지 기다리다가 해당 위치가 다가오면 데이터를 읽고 씀. 이렇게 원하는 위치가 다가올 때까지 기다리는 시간을 '회전 대기 시간(rotational latency time)'이라고 함.
· DBMS의 입장에서 보면 디스크 I/O는 반드시 필요한 것이면서도 처리 시간을 단축하기 위해서는 가능한 줄여야만 하는 부분
1.3.1 어떻게 I/O의 대기 시간을 줄일까?
· 시퀀셜 액세스(Sequential Access)는 시작점에서부터 마지막까지 중간 부분을 빠트리지 않고 전부 액세스(읽기/쓰기)하는 것,메모리에 테이블의 데이터가 없으면 풀스캔(Full Scan, 테이블의 모든 데이터를 읽어오는 것) 할 때 시퀀셜 액세스가 발생, 모든 데이터를 시퀀셜 액세스로 가져온다면 시간이 너무 오래걸려 수행하는 대부분의 성능이 만족스럽지 못하게 됨.
· 이에, 인덱스(index, 색인)의 개념이 대두됨. 데이터베이스의 인덱스에는 검색할 때 사용하는 키 값(SQL문의 WHREE절에 적는 조건의 값을 말함)과 그 키가 존재하고 있는 위치가 기록되어 있음.
1.3.2 인덱스의 사용 예
① 디스크에서 인덱스를 읽어옴
② 읽어온 인덱스를 조사함. 주소를 알 수 있음
③ 가져온 주소를 토대로 디스크에서 데이터를 읽어옴
④ 읽어온 데이터 속에서 찾고 있던 데이터를 발견함
1.3.3 랜덤 액세스
· 인덱스를 사용할 때는 필요한 부분만 읽어오면 충분하지만, 필요한 부분이 디스크 위에 연속적으로 존재하는 경우는 거의 없음. 따라서 헤드를 움직여가면서 띄엄띄엄 접근하게 됨. 이렇게 접근하는 방식을 '랜덤 액세스(random access)'라고 하며, 시퀀셜 액세스와 반대의 의미가 있음.
· 디스크의 관점에서 생각해보면 랜덤 액세스는 비효율적인 부분이 존재함. 탐색하는 작업과 회전 대기로 인해 데이터에 띄엄띄엄 접근할 때마다 어쩔 수 없이 시간이 소모되기 때문.
1.4 | 데이터를 보증하기 위한 디스크
· 데이터는 오라클의 프로세스가 비정상적으로 종료되었어도 무사해야함. CPU나 메모리가 고장이 나거나 고장이 나거나 정전이 발생했다 하더라도 손실되어서는 안됨.
· 오라클은 데이터를 변경한 후에 COMMIT이라고 입력하면 데이터를 디스크에 기록함.
1.5 | 요약
1장에서는 디스크가 느리다는 것, 그리고 인덱스로 인해 높은 효율로 데이터에 접근할 수 있다는 것을 확인함.
추가적으로, 아래 세 가지 이미지들이 잘 떠오를 수 있어야 함.
· 디스크가 회전하고 있는 이미지
· 헤드가 움직이는 것과 회전해 오기를 기다리고 있어서 I/O에 시간이 걸리는 이미지
· 인덱스로 인해 해당 데이터에 빠르게 접근할 수 있다는 이미지(↔ 테이블의 맨 앞부터 끝까지 풀스캔)
'📕 Oracle > [서적] 그림으로 공부하는 오라클 구조' 카테고리의 다른 글
| [Oracle 구조] 6. 커넥션과 서버 프로세스의 생성 (1) | 2023.12.30 |
|---|---|
| [Oracle 구조] 5. 오라클의 기동과 정지 (1) | 2023.12.29 |
| [Oracle 구조] 4. SQL문 분석과 공유풀 (1) | 2023.12.26 |
| [Oracle 구조] 3. 캐시와 공유 메모리 (1) | 2023.12.25 |
| [Oracle 구조] 2. 오라클의 여러 프로세스 (0) | 2023.12.24 |