Take the 2-minute tour ×
Database Administrators Stack Exchange is a question and answer site for database professionals who wish to improve their database skills and learn from others in the community. It's 100% free, no registration required.

I'm part of a small company so as usual covering a number of different roles. The latest of which is procuring a dedicated SQL Server box for our .NET web app. We've been quoted on a dual Xeon E5-2620 (six core) 2.00 GHz CPU configuration (12 cores in total), with 32 GB of RAM. This has left us with a limited budget for the disk array, which would essentially consist of two 2.5" SAS 300 GB drives (15k RPM) in a RAID 1 config.

I know that the disk setup is sub-optimal for SQL Server and I'd really like to push for RAID 10 so we can put the database, log files and tempdb on their own drives. In order to make this compatible with our budget should I consider reducing the number of CPU cores? or would I get better bank for buck keeping the cores and using fewer drives, perhaps 4 in a dual RAID 1 setup?

Here are some additional stats

  • The SQL Server database is tilted towards high numbers of reads to writes, probably 80% vs 20% respectively. The current DB size is around 10 GB 26 GB at present, growing at rate of 250 MB per month.

  • Currently running on SQL Server 2008 R2 Standard on a single quad core Xeon box shared with the web-server (12 GB Ram, 2 x 10k 300GB SAS drives in RAID 1), looking to move to SQL Server 2012 Standard.

  • Database serves approx 100-150 concurrent users with some background scheduling tasks thrown in. Reading this, I'm thinking that 12 cores is serious overkill!

share|improve this question
7  
10GB? Faster disks aren't going to help you very much. All of your data should almost always be in memory... also how much more would RAID 10 really cost you? And what version/edition of SQL Server? I suspect the software licensing will easily be 10-20x the hardware cost. –  Aaron Bertrand May 25 '13 at 14:40
2  
In general my recommendations i to favor RAM over IO and then CPU. Write intensive workload do require a good IO. But the most important consideration for your budget is that CPUs require extra licensing costs. Did you consider that aspect? –  Remus Rusanu May 25 '13 at 14:41
3  
Consider buying SSD. Sorry, but the price of a 15k SAS makes an SSD a better proposition. In fact, I am in the similar place now, and I replace 300G 10k Velciraptors with 450G 10k SAS drives and a 500G SSD (mirrored). The price/Benefit of 15k SAS drives makes me cringe. –  TomTom May 25 '13 at 15:30
4  
@TomTom agreed. 15K SAS is like fuel additive for a 1972 Datsun - yes it will be a little better, but the difference is negligible, and the extra cost of SSD will be more than worth it. –  Aaron Bertrand May 25 '13 at 15:53
2  
Not a bad idea. Shopping is out, but let me tell you I look here at the moment at Samsung 543T - they are just getting into the market (low numbers). 512gb model (480gb, due to reserve). Put it as a pair to a 450gb Seagate 10k drive ;) IO speed is normally THE limiting factor. And SSD are SO much faster.... it is not even "same universe" ;) –  TomTom May 25 '13 at 18:35

2 Answers 2

up vote 5 down vote accepted

Speaking from experience which is humble but I think worth sharing, the major bottleneck with SQL databases (Sybase and SQL server here) is storage.

But I think it's only fair that someone first benchmarks their setup before making any wrong assumptions. In my case, CPU usage has never risen high enough to justify upgrading the CPU any time soon. Instead, I have upgraded from single drive to RAID 1 and then to RAID 10 + a bump from 8GB to 16GB of RAM. All these RAID upgrades helped to reduce previous wait times by a factor of 2 to 6. I suspect upgrading to SSDs would be even better. If you think about it, it can all be reduced to (theoretical) bandwidth. Your [(RAM Speed + RAM Size + Memory controller) link to CPU] combo has a bandwidth limit which would be the most important factor in read operations when your data should always be cached, your particular (RAID) storage has a bandwidth limit (affects reads when cache missed and writes when flushing or with many clients writing lots of data combined). Normalize all those limits as much as possible (bring them closer such that you don't have wasted resources) and raise them as much as possible (upgrade where needed and only if needed, don't let resources become wasted if the system won't be able to use them because some other bottleneck is in the way).

In the end, your worst bottleneck will be the least performing (with least bandwidth) server subsystem in your particular configuration.

HTH

EDIT: I might also add that, in the process of upgrading, I have created separate RAID configurations for the database files and the database log files. The reason was that database log files tend to be write intensive. A log file is used to recover a database from a crash and it's always written to immediately as a transaction is commited before any data is written to the database file. A log file is also used by some database replication servers but most replication is not done instantly but frequently so the read performance impact is minimal here. At least I think so. I have done minimal benchmarking while making this upgrade so again, I recommend anyone first benchmarks their different configurations and first upgrades their storage, then RAM and network link, before thinking about upgrading their CPUs.

share|improve this answer

Somewhat not the answer you are probably looking for in the first part, but: have you considered pushing it to the cloud? AWS could allow you to provide for most of the needs above and extend your buying power without having to deal with the hardware as well.

Second part - The hardware really depends on the tasks. I tend to lean towards more CPU's when I am able to do custom CLR integration, because then I can optimize for truly parallel solutions to problems. Most of the time though if it is better to have set based solutions I find that RAM and harddrive speed is the biggest bottleneck, and the second seems to be your case. (Where the SSD idea above would be helpful)

Without any real stats from your server I would suggest that you look at some caching solutions to lower the writes, (unless you are doing some sort of logging with the writes, or things that need a history) and putting alot more money into your harddrives than CPU's. SQL server is pretty good at going parallel on the queries (if they are written for it) but if you are heavy on writes, then your hard drive is the real bottleneck.

share|improve this answer
1  
Man, have you ever looked at the COST of that? The hourly rate for clout are insance when you run 24/7. The bandwidth to make large data up and downloads are insane. The costs for 1gbit - not even talking 10gbit - internet to have a comparable link when you need to move 50gb of data into and out of the database are insane. Cloud is all nice and dandy if you (a) do not USE the database from local - i.e. it stays in the cloud or (b) are small. –  TomTom May 28 '13 at 3:40
    
Yep I've been down the public cloud route, I long way down in fact! Performance was mediocre, as you'd expect.. but for the cost it doesn't swing it for me. I'm all for developing scale-out patterns but Colo is cheap and you'd need to spend a ton of money to get close to that with any of the popular cloud vendors. Sure it abstracts away the infrastructure, but even when you add on the costs of maintaining hardware it remains a difficult sell. –  QF_Developer May 28 '13 at 10:53

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.