본문 바로가기

학교/데이터베이스

21 디스크 접근 시간

 

 

출처 : 위키백과

A : 트랙

B : 섹터

C : 트랙 A의 섹터

D : 클러스터 (섹터의 집합)

 

탐구 시간(seek time) : 디스크 실린더에 헤드를 놓는 시간

지연 시간(Rotiaion time, latency) : 헤드가 트랙 내에서 원하는 섹터까지 가는 시간

블록 전송 시간(block ransfer time) : 원하는 섹터를 읽는데 걸린 시간

 

실린더의 개수 : 원판의 동심원(트랙) 개수

한 실린더에 들어가는 트랙 수 : 원판의 개수 * 2 ( 앞 뒷면 다 쓰니)

-> 원판이 여러 개일 때, 같은 위치에 있는 트랙들 수를 말하는 거임

 

예시를 보자

예시 1

 

Block size B : 512 Bytes, Gap size G : 128 Bytes 이고,

한 트랙에 존재하는 블록이 20개,

한 표면에 존재하는 트랙이 400개(=실린더 400개),

이중 표면을 가진 원판(disk pack)이 15개 일 때 다음의 값들

분당 회전수(rpm) = 2400, seek time은 30ms로 고정

 

1a.트랙의 총 용량

1b. 트랙의 가용 용량

2. 실린더의 수

3a. 총 실린더 용량

3b. 유효 실린더 용량

4a. 원판(disk pack)의 총 용량

4b. 원판(disk pack)의 가용 용량

5a. 전송 시간(transfer time)

5b. 블록 전송 시간(block transfer time)

5c. 평균 지연 시간(Rotiaion time) 

5d. bulk transfer time

 

1a. 트랙의 총 용량 = (블록 사이즈 + 갭 사이즈) * 트랙에 존재하는 블록 수

-> (512 + 128) * 20 = 12,800 Bytes

 

1b. 트랙의 가용 용량 = 블록 사이즈 * 트랙에 존재하는 블록 수

-> 512 * 20 = 10,240 Bytes

 

2. 실린더의 수 = 트랙의 수 = 400

 

3a. 총 실린더 용량 = (블록 사이즈 + 갭 사이즈) * 트랙에 존재하는 블록 수 * (원판 개수 * 2)

->  (512 + 128) * 20 * (15 * 2) = 384,000 Bytes

 

3b. 유효 실린더 용량 = 블록 사이즈 * 트랙에 존재하는 블록 수 * (원판 개수 * 2)

-> 512 * 20 * (15 * 2) = 300KB

 

4a. 원판의 총 용량 =  (블록 사이즈 + 갭 사이즈) * 트랙에 존재하는 블록 수 * 한 면의 트랙 수 * (원판 개수 * 2)

->  (512 + 128) * 20 * 400 * (15 * 2) = 153,600,000Byes = 150Mb

 

4b. 원판의 가용 용량 = 블록 사이즈 * 트랙에 존재하는 블록 수 * 한 면의 트랙 수 * (원판 개수 * 2)

-> 512 * 20 * 400 * (15 * 2) = 120Mb

 

한 번 회전에 걸리는 시간 : (60 * 1000) / 2400 = 25ms

 

5a. 전송 시간(tr) = 트랙의 크기 / 한 번회전에 걸리는 시간

-> 12,800Bytes / 25ms = 512Bytes/ms

 

5b. 블록 전송 시간(btt) = 블록 크기 / 전송시간

-> 한 블럭이 512Bytes이므로, 512Bytes / 512Bytes/ms = 1ms

 

5c. 평균 지연 시간(rd) =  한 번 회전에 걸리는 시간 / 2

-> 25ms / 2 = 12.5ms

 

5d. bulk transfer time(btr) = (블록 크기 / 총 블록 크기) * 전송 시간

-> (512 / 640)Bytes * 512Bytes/ms = 409.6 Bytes/ms

 

+++

 

단일 블록의 찾아, 전송하는데 걸리는 시간

-> seek time + rd + btt

-> 30 + 12.5 + 1 = 43.5ms

 

20개의 임의 블록을 전송하는데 걸리는 시간

-> 20 * (s + rd + btt)

-> 20 * 43.5 = 870ms

 

20개의 연속된 블록을 전송하는데 걸리는 시간 (이중 버퍼링 사용)

-> s + rd + 20 * btt

-> 30 + 12.5 + (20*1) = 62.5ms

 

좀 더 정확한 수치는

-> s + rd + ((20 * B)/btr)

-> 30 + 12.5 + (10,240 / 409.6)

-> 42.5 + 25 = 67.5ms

 

예시2

20개의 기록면, 500트랙/면, 0.5KB/섹터, 40 섹터/트랙 , 갭 0.125KB(128 Bytes)

디스크 회전 속도 = 6000 rpm, 평균 탐구시간 = 20ms

디스크 전송률 = 1회전 동안 1트랙의 데이터를 모두 읽는 속도

한 바퀴 도는데 걸리는 시간 (60*1000 / 6000) = 10ms

 

1. 한 트랙의 용량(총 용량, 유효 용량)

2. 한 실린더의 용량(총 용량, 유효 용량)

3. 평균 회전 지연 시간 (rd)

4. 블록 전송 시간 (btt)

5. 대량 전송률 (btr)

6. 하나의 섹터를 찾아서 읽는 평균 시간

7. 10개의 임의의 섹터를 전송하는 시간

8. 10의 연속 섹터를 전송하는 시간 (이중 버퍼링 사용)

 

1. 총 용량 : (512 + 128) * 40 * (10 * 2)= 512,000Bytes = 500KB

   유효 용량 :  512 * 40 * (10 * 2) = 409,600Bytes = 400KB

2. 총 용량 : 640 * 40 * 40 = 1,024,000Bytes = 1000KB

   유효 용량 : 512 * 40 * 40 = 819,200Bytes = 800KB

 

tr = 25,600Bytes / 10ms = 2,560Bytes/ms

3. rd = 10ms / 2 = 5ms

4. btt = 512Bytes / 2,560Bytes/ms = 0.2ms

5. btr = 2,560Bytes/ms * (512/640)Bytes = 2,048 Bytes/ms

-> btt' = blocksize / btr = 0.5Kb/2.0KB = 0.25ms

6. seek time + rd + btt

-> 20 + 5 + 0.2 = 25.2ms

7. 10 * (25.2) = 252ms

8. seek time + rd + btt` * 10

-> 20 + 5 + 2.5 = 27.5ms

 

예시 3

20개의 기록면(디스크 10장) 2,000트랙/면, 512 Byte/섹터, 40섹터/트랙

디스크 1회전 시간 = 10ms, 평균 탐구시간 = 10ms

디스크 전송율 = 1회전 동안 1트랙의 데이터를 모두 읽는 속도

 

1. 한 실린더의 용량(유효 용량)

2. 한 섹터에 접근하기 위한 접근 시간

 

1. 512 * 40 *  (10 * 2)= 409,600 Bytes = 400KB

2.

-> 한 트랙의 크기 : 512 * 40 = 20,480 Bytes = 20KB

-> tr = 20,480 Bytes / 10ms = 2048 Bytes/ms

-> btt = block size / tr = 512 Bytes / 2048 Bytes/ms = 0.25ms

-> rd = 10ms / 2 = 5ms

그러므로 seek time + rd + btt = 10 + 5 +0.25 = 15.25ms

 

예시 4

20개의 기록면, 2000트랙/면 512Bytes/섹터, 40섹터/트랙

디스크 1회전 시간 = 10ms, 평균 탐구시간 = 10ms

디스크 전송율 = 1회전 동안 1트랙의 데이터를 모두 읽는 속도

 

이 디스크에 100 Byte 크기의 고정 길이 레코드 10만개로 구성된 파일을

비신장(unspanned)방식으로 저장하려 한다. (1섹터 = 1블록이라 가정)

 

1. bfr

2. 파일을 저장하는 필요한 총 블록 개수

3. 비신장 방식으로 레코드를 저장하면, 이 파일이 디스크에서 차지하는 공간

 

1. bfr = 512Bytes / 100Bytes = 5

2. r / bfr = 100,000 / 5 = 20000

3.

1 실린더 크기는 409,600 Bytes이고,

비신장 방식이므로, 레코드 5개당 512byte를 사용한다.

그러므로, 512 * 20,000 / 409,600 = 25실린더만큼의 공간을 사용한다.

 

예시 5

디스크에 100바이트 크기의 고정 길이 레코드 1,000,000개로 구성된 학생 파일을 저장하고자 한다.

파일 구성은 다음과 같다.

- 학생 파일은 학번 순으로 정렬한 순차파일로 저장, 학번에 대한 기본 인덱스를 구성한다.

- 기본 인덱스 파일은 정렬된 순차파일 형태로 구성

- 주민번호를 이용한 순차파일 형태의 보조(secondary)인덱스도 구성한다.

- 학번, 주민번호, 블록(섹터) 포인터의 길이는 모두 10바이트이다.

- 1블록은 1섹터의 크기와 동일하다

 

a. 10,000번째 레코드는 몇 번 섹터에 위치하는지

b. 데이터 파일을 저장하기 위한 블록 수

c. 학번 기본 인덱스 파일의 블록 수

d. 주민번호 보조 인덱스 파일의 블록 수

e. 특정 학번의 학생을 검색할 때, 접근해야 하는 평균 블록 수

f. 특정 주민번호의 학생을 검색할 대 접근해야 하는 블록 수

g. e번 탐색 시간

h. f번 탐색 시간

 

위의 예시 4에서 블록 크기가 512 Bytes였으므로,

따라서 bfr = 512/ 100bytes = 5

 

a. 10,000 / 5 = 2,000 즉, 2,000 번째 블록에 있다.

 

b. 1,000,000 / 5 = 200,000 즉, 200,000 blocks

 

c. 학번 인덱스 etnry : 학번 + 블록 포인터 = 20 Bytes

bfri = 512 / 20 = 25 (블록당 인덱스 entry 수)

200,000 / 25 = 8,000 즉, 8,000 개의 index block이 있다.

 

d. 주민번호 보조 index entry 수 = 레코드 수(r) = 1,000,000인덱스

블록 수 = 1,000,000 / 25(bfri) = 40,000 index block

 

e. 학번 이진탐색 + 데이터 접근 = log2^8,000+1 = 13 + 1 = 14 blocks

 

f. 주민번호 이진탐색 + 데이터 접근 = log2^40,000 +1 = 17 blocks

 

g, h는 예시 3의 정보들을 사용

한 block을 찾는데 15.25만큼의 시간이 걸립니다.

 

각각의 block들이 연속되지 않은 위치에 있다면,

block 수 * (seek time + rd + btt) 만큼의 시간 소모.

 

반대로 각각의 block들이 연속된 위치에 있다면,

seek time+ rd + (block 수 * btt)만큼의 시간이 소모.

 

g.

- 연속된 위치가 아닐 때 14 * 15.25 = 213.5ms

- 연속뒨 위치일 때 : 10 + 5 + (14 * 0.25ms) = 18.5ms

 

h.

- 연속된 위치가 아닐 때 : 17 * 15.25 = 259.25ms

- 연속뒨 위치일 때 : 10 + 5 + (17 * 0.25ms) = 19.25ms

 

 

 

 

'학교 > 데이터베이스' 카테고리의 다른 글

20. sql-condition  (0) 2020.12.11
19. SQL-DML  (0) 2020.12.10
18. SQL-DDL  (0) 2020.12.10
17. 데이터베이스 보안  (0) 2020.12.10
16. Database Recovery  (0) 2020.12.10