It is often said that Hard Disk Drive storage is
significantly cheaper per GiByte than Solid State Devices – this is wholly
inaccurate within the database space. People need to look at the cost of the complete
solution and not just a single component part in isolation to what is
really required to meet the business requirement.
Buying a single Hitachi Ultrastar 600GB 3.5” SAS 15Krpm hard
disk drive will cost approximately £239.60 (http://scan.co.uk,
22nd March 2012) compared to an OCZ 600GB Z-Drive R4 CM84 PCIe
costing £2,316.54 (http://scan.co.uk, 22nd
March 2012); I’ve not included FusionIO ioDrive because there is no public
pricing available for it – something I never understand and personally when
companies do this I immediately think what are they hiding, luckily in
FusionIO’s case the product is proven though is expensive compared to OCZ
enterprise offerings.
On the face of it the single 15Krpm hard disk has a price
per GB of £0.39, the SSD £3.86; this is what you will see in the press and this
is what sales people will use in comparing the two technologies – do not be
fooled by this bullshit people!
What is the requirement? The requirement is the database
will have a static size of 400GB kept static through archiving so growth and
trim will balance the database size, the client requires resilience, there will
be several hundred call centre staff querying the database where queries will
read a small amount of data but there will be no hot spot in the data so the
randomness will come across the entire 400GB of the database, estimates predict
that the IOps required will be approximately 4,000IOps at peak times, because
it’s a call centre system the IO latency is important and must remain below 5ms
per IO. The balance between read and write is 70% read, 30% write.
The requirement is now defined and we have three of the most
important pieces of the puzzle – space required, estimated IOps and maximum
latency per IO.
Something to consider with regard SQL Server; write activity
requires synchronous IO to the storage media specifically the transaction log; that
means the write thread will wait until the IO is completed and hardened off
until the thread can continue execution, the requirement has stated that 30% of
the system activity will be write so we can expect a high amount of synchronous
activity.
The hardware solution needs to be defined; two possible
solutions: hard disk or solid state based; the real question now is how many
hard disks are required to achieve the IO throughput, the latency and
resilience, ditto for the solid state.
Hard Drive
solution
On a test on an HP DL380, P410i controller using IOMeter
against a single 15Krpm 146GB SAS drive, the throughput given on a transfer size
of 8KiB against a 40GiB file on a freshly formatted disk where the partition is
the only partition on the disk thus the 40GiB file is on the outer edge of the
drive so more sectors can be read before head movement is required:
For 100% sequential IO at a queue depth of 16 with 8 worker
threads 43,537 IOps at an average latency of 2.93ms (340 MiB/s), for 100%
random IO at the same queue depth and worker threads 3,733 IOps at an average
latency of 34.06ms (34 MiB/s).
The same test was done on the same disk but the test file
was 130GiB: For 100% sequential IO at a queue depth of 16 with 8 worker threads
43,537 IOps at an average latency of 2.93ms (340 MiB/s), for 100% random IO at
the same queue depth and worker threads 528 IOps at an average latency of
217.49ms (4 MiB/s).
From the result it is clear random performance gets worse as
the disk fills up – I’m currently writing an article on short stroking which
will cover this in detail.
Given the work load is random in nature looking at the
random performance of the single drive when only 40 GiB of the 146 GB is used
gives near the IOps required but the latency is way out.
Luckily I have tested 6 x 15Krpm 146GB SAS 15Krpm drives in
a RAID 0 using the same test methodology, for the same test above on a 130 GiB
for each drive added the performance boost is near linear, for each drive added
throughput goes up by 5 MiB/sec, IOps by 700 IOps and latency reducing nearly
50% per drive added (172 ms, 94 ms, 65 ms, 47 ms, 37 ms, 30 ms). This is
because the same 130GiB is spread out more as you add drives 130 / 1, 130 / 2,
130 / 3 etc. so implicit short stroking is occurring because there is less file
on each drive so less head movement required.
The best latency is still 30 ms but we have the IOps
required now, but that’s on a 130GiB file and not the 400GiB we need.
Some reality check here: a) the drive randomness is more
likely to be 50/50 and not a full 100% but the above has highlighted the effect
randomness has on the drive and the more a drive fills with data the worse the
effect.
For argument sake let us assume that for the given workload
we need 8 disks to do the job, for resilience reasons we will need 16 because
we need to RAID 1+0 them in order to get the throughput and the resilience,
RAID 5 would degrade performance.
Cost for hard drives: 16 x £239.60 = £3,833.60
For the hard drives we will need disk controllers and a separate
external disk array because the likelihood is that the server itself won’t take
the drives, a quick spec off DELL for a PowerVault MD1220 which gives the dual
pathing with 16 disks 146GB 15Krpm 2.5” disks is priced at £7,438.00, note its
probably more once we had two controller cards to sit in the server in, racking
etc.
Minimum cost taking the DELL quote as an example is therefore: {Cost of Hardware} / {Storage
Required}
£7,438.60 / 400 = £18.595 per GB
£18.59 per GiB is a far cry from the £0.39 we had been told
by the salesman and the myth. Yes, the storage array is composed of 16 x 146
disks in RAID 10 (therefore 8 usable) giving an effective usable storage availability of 1168GB but the actual storage
requirement is only 400 and the extra disks have had to be purchased to get
the IOps up.
Solid State Drive
solution
A single card significantly exceeds the IOps and latency
required, for resilience two will be required.
( £2,316.54 * 2 ) / 400 = £11.58 per GB
With the SSD solution only two PCIe sockets are required, no
external disk units, no additional controllers, no redundant controllers etc.
Conclusion
I hope by showing you an example that the myth that hard
disk drives are cheaper per GiB than Solid State has now been dispelled - £11.58 per GB for SSD compared to £18.59 for Hard Disk.
I’ve not even touched on the running costs, compare the
costs of running 18 hard disks, that’s a lot of heat and power compared to two
PCIe cards!Just a quick note: I've left a fair amount of information out due to this being a blog! If in doubt, email me :)I'll also deal with the myth that SSD's wear out at a later date as well - that's just way over done still, yes, 5 years ago, but now - no.