성능 모니터를 이용하여 SQL Server 의 Disk I/O 를 측정하여 Disk 병목 현상이 있는지 확인 후 디스크 증가 등의 성능 튜닝을 진행한다.

 

<성능 모니터 카운터>
Disk Reads/sec : 선택된 디스크 (또는 디스크 어레이) 에서 초당 수행된 읽기 작업 횟수
Disk Writes/sec : 선택된 디스크 (또는 디스크 어레이) 에서 초당 수행된 쓰기 작업 횟수
Avg. Disk Queue Length : 샘플 간격 동안 선택된 디스크에 대해 큐에 있는 읽기 및 쓰기 요청의 평균 수
Avg. Disk Sec/Read : 샘플 간격 동안 선택된 디스크에서 데이터 읽기에 소요된 평균 시간(초)
Avg. Disk Sec/Write : 샘플 간격 동안 선택된 디스크에서 데이터 쓰기에 소요된 평균 시간(초)

 

<임계값>

카운터

임계값

초당 디스크 당 I/O 수

100 이하

Disk Reads/sec

0.015 (15ms) 이하

Disk Writes/sec

0.015 (15ms) 이하

Avg. Disk Queue Length

2 이하

 

<I/O 계산>
디스크 당 I/O 수 = [읽기 + (2 * 쓰기)] / 디스크 수

 

#RAID 10 어레이로 구성된 8개 디스크 드라이브의 예

카운터

측정값

Disk Reads/sec

420

Disk Reads/sec

300

Avg. Disk Queue Length

43

Avg. Disk Sec/Read

0.032

Avg. Disk Sec/Read

0.025

 

[420 + (2 * 300)] / 8 = 127.5 디스크 당 물리적 I/O 수

결과값 127.5는 초당 100 I/O라는 한계값을 초과하므로, 이 경우 약간의 디스크 병목을 가지게 된다. 읽기 및 쓰기에 걸린 시간 값만을 조사하여도 병목이 발생함을 알 수 있다. 또, 평균 큐 길이가 43으로 I/O 요청이 큐에서 잠시 기다림으로 인해 긴 대기시간이 발생함을 의미한다.

 

<디스크 최소 개수>

[420 읽기 + (2 * 300 쓰기)] = 1020 I/O
1020 전체 I/O / 100 디스크 당 I/O = 10.2 필요한 디스크 수 
10.2 디스크는 가질 수 없으므로 12개의 디스크로 반올림 (RAID 10을 위해서는 짝수개의 디스크 필요)

 

 

출처 : SQL Server 2000 성능 튜닝 (하성희 역)