(ORACLE) I/O 와 디스크 관계
* 오라클의 세가지 키워드
1. 병렬처리를 가능케하고 높은 처리량을 실현한다.
2. 응답을 중시한다.
3. 커밋한 데이터는 지킨다.
-> 모두다 동시에 실현 시킬 순 없다.
ex 1. 커밋 하자마자 디스크에 데이터를 저장하고 싶지만 응답속도를 낮춘다.(2,3)
ex 2. 병렬처리는 처리하는 각각의 쓰레드가 혼선을 일으키지 않기 위해서 lock을 걸기 때문에 이는 높은 처리량에 있어 장애물이 된다.(1)
데이터베이스는 디스크의 저장된 데이터 이다.
:: 꺼내는 것에 끝나는 것이 아닌 꺼낸 데이터를 다시 집어넣야함.
디스크의 구조 (like 여러개의 LP판이 겹쳐진 구조 feat.헤드)
근데 이 모든 동작이 컴퓨터 보다 느리다는 것은 함정!
메모리는 전기 신호로 처리하지만 디스크에는 기계동작이 들어가 있기 때문.
*디스크의 I/O는 DBMS에게 필요한 것이긴 하지만 동시에 가능한 줄여야 하는 부분이기도 하다.
I/O의 접근 빈도를 줄이는 것이 성능에 효율적이라 하였다.
"그렇다면 접근하지 않고 뛰어난 성능을 내는 방법은 없나?"
답 : 시퀀셜 엑세스
시퀀셜 엑세스란 ?
시작부터 끝까지지 모든것을 탐색
*seek가 필요가 없음! (시작점이고 모고 걍 다 찾기 때문에)
인덱스의 사용
SELECT EMPNO
FROM EMP
WHERE NAME = "래리";
index는 name의 주소를 가지고 있다.(주소 = rowid)
해당 주소에는 찾고자 하는 name의 값들이 몰려있다.
그렇다면 index의 크기가 무진장 커지면 성능이 오히려 나빠지겠네?
* index의 index를 나누므로 상관없다.
인덱스를 활용하면 필요한 부분을 무조건 빨리 찾을수 있겠군!
no! 테이블에 해당 인덱스 주소에 필요한 데이터가 모여 있을때만 가능한 소리!
만약에 모여 있지 않다면 어떻게 찾아야하나?
헤드를 이용하자!
헤드를 이용해서 필요한 부분을 띄엄띄엄 읽는다. => 랜덤엑세스
|