You are on page 1of 3

How Fast is a disk ?

I've been providing some information on storage, so I thought I'd post it! Published performance figures for disks, disk controllers , storage arrays, SANs, NAS and DAS are usually based around optimal conditions which rarely match real world. For example the maximum throughput for a disk is usually quoted in bits whilst most users relate to bytes. The maximum throughput for an individual disk is usually calculated for sequential io ( where reads and writes are contiguous ) for databases the majority of io is random. When calculating the throughput of a disk the spin speed is the most influential factor, the faster the spindle speed, the greater the throughput.

Disk
15k SCSI/SAS/FC 10K SCSI/SAS/FC 7.2k SATA

Maximum theoretical Sequential io


434 294 181

Maximum theoretical random io


174 125 74

In reality 80% of this figure is the achievable figure ( Ref: SQL Server 2000 Performance Tuning Technical Reference :: Microsoft Press )

Calculations from published figures for Seagate Cheetah and Barracuda disks ( average value of read and write )

Throughput for SQL Server ( Typical )


Disk
15k SCSI/SAS 10K SCSI/SAS 7.2k SATA

Seq io
347 235 145

Throughput @64k
21.7 Mbyte/sec 14.7 Mbyte/sec 9 Myte/sec

random io
140 100 59

Throughput @8k
1 Mbyte/sec 0.78 Mbyte/sec 0.46 Mbyte/sec

SQL Server random io are normally 8k, sequential generally 64k

Turning this to raid arrays


Creating a 4 spindle raid 5 array would support the following io capacities/sec o ( available capacity = 3 x disk size ) Random Write Random Read Sequential Sequential

Disk Type

Write Io 15k SCSI/SAS 10K SCSI/SAS 7.2k SATA 140 100 59 Mbyte 1 0.78 0.46 Io 560 400 236 Mbyte 4 3.12 1.84 Io 347 235 145 Mbyte 21.7 14.7 9

Read Io 1388 940 580 Mbyte 86.8 58.8 36

Creating a 4 spindle raid 10 array would support the following io capacities/sec o ( available capacity = 2 x disk size, match for spindle count ) Random Write Io Mbyte 2 1.56 0.92 Random Read Io 560 400 236 Mbyte 4 3.12 1.84 Sequential Write Io 694 470 290 Mbyte 43.4 29.4 18 Sequential Read Io 1388 940 580 Mbyte 86.8 58.8 36

Disk Type 15k SCSI/SAS 10K SCSI/SAS 7.2k SATA

280 200 118

Creating a 6 spindle raid 10 array would support the following io capacities/sec o ( available capacity = 3 x disk size, match for capacity ) Random Write Io Mbyte 3 2.34 1.38 Random Read Io 840 600 472 Mbyte 8 6.24 3.68 Sequential Write Io 1041 705 335 Mbyte 65.1 44.1 27 Sequential Read Io 2082 1410 670 Mbyte 130.2 88.2 54

Disk Type 15k SCSI/SAS 10K SCSI/SAS 7.2k SATA

420 300 177

Creating a 8 spindle raid 10 array would support the following io capacities/sec o ( available capacity = 4 x disk size, match for read capacity ) Random Write Io Mbyte 4 3.12 1.84 Random Read Io 1320 800 472 Mbyte 8 6.24 3.68 Sequential Write Io 1388 940 580 Mbyte 86.8 58.8 36 Sequential Read Io 2776 1880 1160 Mbyte 173.6 117.6 72

Disk Type 15k SCSI/SAS 10K SCSI/SAS 7.2k SATA

560 400 236

Notes: Most scsi raid controllers enable split reads on raid 1/10 ( Ive assumed this is the same for SATA but this may not be the case )

A 4 disk raid 5 array presents 4 spindles for read, thus a comparison must be shown for a raid 10 where 4 spindles are presented for read.

Notes: The io rates are taken from the average of the average seek times and track to track times. Disks actually support slightly more reads than writes, but for the purpose of this comparison assume read and write io are the same. For the 15k disk the absolute figures would be 166 write / 181 read One way to improve performance further is to short format disks, e.g. format a 300Gb disk to 150Gb. This technique should halve seek times, disks are sometimes formatted this way with the outer partitions being allocated for fast performing usage and the inside to slower operations. However, a disk head can only be one place at a time and this type of horizontal partitioning can cause inconsistent performance. Cache on disks should be disabled in raid arrays for databases. Controller cache should ideally be all allocated to write, read cache is counterproductive for a RDBMS which attempts to cache its main data and handle read ahead. Write cache attempts to turn random writes to sequential writes and/or facilitate elevator sorts these increase write performance. Note that the large amounts of cache memory on a SAN rarely improves performance and a cache once saturated cannot improve disk performance.
o 64Gb of cache divided read/write across 32 LUNs is actually not much memory at all

( A quick note about raid 6 .. This is raid 5 with an additional parity write, this means the array can stand a double disk failure, read performance remains unaffected but write performance degrades further due to the additional parity write. Raid 6 has a slightly better failure rate than raid 5 where there are large numbers of spindles in the array. )

You might also like