티스토리 뷰
2018/4/18
디스크 구조의 성능 특성
디스크 I/O 시간을 줄이기 위해서 레코드를 전략적으로 배치 해야 하는데, 두 레코드를 같은 블록, 같은 트랙, 같은 실린더, 인접한 실린더 순서대로 배치를 해야 I/O시간을 줄일 수 있다.
디스크 암에 달린 헤드는 하나의 실린더에 여러개가 붙어 있지만 병렬적으로 데이터를 읽어오지 못한다. 한번에 하나의 디스크 헤드로 읽어 오는것이 병렬적으로 여러개의 헤드를 통해 데이터를 읽는것보다 안정적이고 더 빠르기 때문이다.
그렇기 때문에, 같은 블록, 같은 트랙, 같은 실린더 순서대로 인접한 레코드를 배치 시켜야 하는것이다. 트랙이 꽉찬 경우 동일 실린더의 다른 트랙에 인접 레코드들을 배치 시켜야 한다. 맨위 실린더의 트랙, 그 아래 실린더의 트랙, 그 밑밑 실린더의 트랙.. 이 순서대로 헤드가 디스크에서 데이터를 읽을 수 있기 때문이다.
같은 실린더도 꽉찬 경우에는 인접 실린더에 배치 시켜야 한다.
이런식으로 데이터 레코드를 순차적으로 배열시켜놓은경우에는 seek time과 rotational delay를 줄일 수 있다. 무작위 접근보다 훨씬 빠르다.
------------------------------------------------------------------------------------------
RAID
디스크는 물리적인 장치 이기 때문에 고장이 훨씬 잘나며 cpu발전속도에 비해 매우 느리게 발전 된다.
디스크는 cpu에 비해 매우 느리기 때문에 디스크 때문에 병목 현상이 일어날 수 있으며 그것을 해결하기 위해 여러개의 하드 디스크를 하나로 묶고 데이터를 그 여러개의 하드디스크에 분산 배치 시켜놓고 나중에 병렬적으로 읽고/쓰기를 함으로써 성능 향상을 기대할 수 있다. 이런식으로 하게 될 경우 디스크하나가 고장나더라도 데이터를 중복해서 배치 시켜놓으면 신뢰도를 확보 할 수 있다.RAID는 Redundant Array of Independent disks 의 줄임말이다. RAID를 사용함으로써 하드디스크의 성능 향상과 신뢰도 향상을 기대 할 수 있다. RAID를 어떻게 구성 하냐에 따라 여러가지 버전으로 나뉘는데 그것을 RAID Level이라 한다.
데이터를 여러개의 하드디스크에 분산 배치시키는것을 데이터 스트라이핑(data striping)이라고 한다.
데이터를 얼만큼의 크기로 잘라서 병렬 디스크에 배치 시킬것인가가 스트라이핑 단위 라고 한다.
스트라이핑 단위는 비트 단위, 바이트 단위, 레코드 단위 등등이 될 수 있다.
비트 단위 스트라이핑에서는 하나의 디스크를 r/w 하는 시간에 여러개의 디스크에서 동시에 블럭을 읽어 올 수 있다.
디스크가 D개 있다고 하면 원래는 1비트 읽을 시간에 D비트를 읽을 수 있다는 뜻이다.
성능을 향상시킬 수록 신뢰도는 떨어진다.
신뢰도를 향상시킬수록 성능은 떨어진다.(데이터를 중복 시켜서 저장해야 하기 때문이다.)
데이터를 중복 시킴으로써 신뢰도를 향상 시키는데, 그럼 그 중복된 데이터는 어디에 저장해야 할까?
1.check disk에 저장한다.
2.모든 디스크에 분산해서 저장한다.
check disk는 다른 하드디스크들에 대한 패리티 정보를 담는다.
중복의 여러 수준
RAID 0 : 중복없음.
데이터를 중복 시켜서 저장하지 않으며, 무조건 하나의 레코드를 짤라서 여러개의 디스크에 저장시킴.
공간 활용도 100%
가장 저렴하지만, 신뢰도가 떨어진다.
RAID 1 : Mirrored(거울 영상)
하나의 데이터를 2개의 디스크에 중복해서 저장하는 방법이다. 성능 향상은 단일 디스크 사용에 비해 거의 없지만 신뢰도가 향상 되기 때문에 사용한다. 하나의 디스크가 뻗더라도 다른 하나의 디스크에 똑같은 데이터가 있기 때문이다.
데이터를 write할때 2개의 디스크에 동시에 쓰지 않고, 하나의 disk에 먼저 쓴다음에 나중에 또다른 disk에 중복 저장하는 방법을 사용한다. 왜냐하면, 2개의 디스크에 동시에 write하다가 시스템이 뻗어버리면, 양쪽 디스크에 모두 잘못된 데이터가 들어가기 때문이다.
비용이 가장 많이 드는 시스템이다.
RAID 2 :
RAID 3 : 비트 인터리빙 패러티 -> Check disk를 오류 복구용으로 사용
RAID 4 : 블록 인터리빙 패러티 -> 마찬가지로 Check disk 1개 사용
RAID 5 : Parity block을 모든 디스크에 균등 분산 시킴.(블록-인터리빙 분산 패리티)
RAID 5 -> 일반적인 상황에 좋다. 소규모,대규모 요청에 높은 성능
RAID 2,4 -> RAID 3,5보다 항상 안좋다.
RAID 3 -> 연속되는 블록 대규모 전송 요청이 많을 경우에 사용하면 좋다.
------------------------------------------------------------------------------------------
버퍼 관리자
DBMS의 버퍼 관리자는 디스크 페이지를 버퍼로 올리는 역할을 하게 된다. 버퍼에 올라와진 디스크 페이지를 프레임이라고 부른다. 디스크 I/O는 한 페이지 단위로 일어나기 때문에 페이지의 크기와 프레임의 크기는 같다.
버퍼를 프레임 단위로 잘라놓은것을 버퍼 풀이라고 하는데, 버퍼 관리자는 이 버퍼 풀에 프리엠이 꽉찰 경우 적절한 교체 알고리즘으로 프레임을 교체 시킨다.
버퍼 관리자
1. 버퍼 풀에 어떤 페이지가 요청 되었는데 페이지 miss가 발생한 경우, 다음과 같은 일을 수행한다.
a.교체할 프레임 선택
b.교체할 프레임의 dirty bit 확인후 true면 disk에 써줌.
c.페이지를 프레임에 옮겨줌.
d.그 옮겨진 프레임의 pin count 를 1 증가시키고(pinning) 프레임의 주소를 요청자에게 반환한다.
pin count라는것은 그 프레임을 사용(참조)하고 있는 사용자의 수이다.
그 프레임 내의 페이지를 요청했던 코드가 페이지를 해제시키면 pin count는 1 감소 된다.
-> unpinning한다고 표현한다(뺀다).
사용자가 페이지를 수정한 경우 dirty bit이 세팅 되며 나중에 교체 될때 disk에 그 값을 쓰게 된다.
버퍼 관리자는 그 프레임의 pin count가 0이 된 경우에 그 프레임을 교체 명단에 올린다.
p267
'컴퓨터 공학과 졸업 > 데이터베이스' 카테고리의 다른 글
무결성 제약조건 (0) | 2018.06.28 |
---|---|
인덱스 (0) | 2018.06.27 |
[정보처리기사] 정규화 정리 (0) | 2018.03.29 |
내부조인,외부조인 (0) | 2018.03.26 |
데이터베이스 튜닝 (0) | 2017.12.07 |
- Total
- Today
- Yesterday
- mobx
- props
- useRef
- type alias
- react hooks
- storybook
- reactdom
- reflow
- await
- es6
- reducer
- hydrate
- design system
- promise
- atomic design
- state
- return type
- rendering scope
- react
- async
- webpack
- useEffect
- Next.js
- typescript
- computed
- server side rendering
- Polyfill
- javascript
- Action
- Babel
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |