We are considering clustering our SQL Server 2008 EE instances. The storage is on SAN. Can we put tempdb data/log files on SAN? What are the pros and cons on this solution? For optimal performance, can we create the same amount of tempdb data files as processor cores?
SQL Server – Tempdb on SAN in Failover Clustering
clustersql serversql-server-2008storagestorage-area-network
Related Solutions
Without making enemies on the SAN team, how can I reassure myself and the application developers that our SQL servers aren't suffering from poorly configured storage? Just use perfmon stats? Other benchmarks like sqlio?
In short, there probably isn't a way to be truly sure. What I would say (I am a SAN admin), is that if your applications are performing up to your expectations, don't worry about it. If you start to see performance issues that you believe could be related to SAN/Disk IO performance, then it might be wise to inquire. I do not use much HP storage like you do, but in the IBM/NetApp world I can say from experience that there aren't many options which would allow you to configure it "poorly". Most enterprise storage these days takes a lot of the guesswork out of building raid arrays, and doesn't really let you do it wrong. Unless they are mixing drive speeds and capacities within the same raid groups you can rest-assured in most cases that your disk is performing fine.
If I load test on these SAN drives, does that really give me a reliable, repeatable measure of what I will see when we go live? (assuming that the SAN software might "dynamically configure" differently at different points in time.)
Load testing should be plenty reliable. Just keep in mind that when you are load testing one box, that being on a shared SAN/Disk Array that its performance can (and will) be affected by other systems using the same storage.
Does heavy IO in one part of the SAN (say the Exchange server) impact my SQL servers? (assuming they aren't giving dedicated disks to each server, which I've been told they are not)
It can. It is not all about the disks, or which disks, the servers are on. All of the data is being served up via a disk controller, and then a SAN switch. The performance you will see greatly depends on how the disk controller is connected to is corresponding disk shelves, and the corresponding SAN. If the entire array connects to the backbone SAN on one single strand of 4gbps fiber, then clearly the performance will be impacted. If the array is connected across two redundant SAN's which are load balanced, using trunked links, then it would impossible for exchange alone to suck up too much bandwidth. Another thing which needs to be considered is how many IO/sec the array is capable of. As long as the array and the SAN it is connected to are scaled correctly, heavy IO in other parts of the SAN environment should not impact your SQL performance.
Would requesting separating logical drives for different functions logical drives (data vs log vs tempdb) help here? Would the SAN see the different IO activity on these and optimally configure them differently?
That is probably a matter of preference, and also greatly depends on how your storage admins configure it. They could give you three LUNs in the same array or volume, in which case its all the same anyway. If they gave you individual LUNs on different arrays, in different volumes (physically different disks), then it might be worth it for you to separate them.
We're in a bit of a space crunch right now. Application teams being told to trim data archives, etc. Would space concerns cause the SAN team to make different decisions on how they configure internal storage (RAID levels, etc) that could impact my server's performance?
I don't imagine your storage admin would change the raid level in order to free up space. If he would, then he should probably be fired. Space concerns can lead things to be configured differently, but not normally in a performance-impacting way. They might just become a little more tight about how much space they give you. They might enable features such as data de-duplication (if the array supports it) which can hinder the performance of the array while the process runs, but not around the clock.
Consider whether you really need hot failover. If you're worrying about price at the level of an entry level SAN then consider whether you really have a business case for that recovery model. How expensive is your downtime for an outage?
If the cost of an outage justifies the cost of a decent SAN, buy it and don't penny pinch. Otherwise, consider other failover models. If your downtime is not so valuable, you can probably tolerate a hot standby model where the database is replicated to another server with local disk. This takes longer to recover but does not need shared disk storage. If this works for you then you don't need a SAN and the local disk on the servers will probably be much cheaper.
Another option would be the secondhand market. You can get a re-certified second hand Clariion CX200 or CX300 (which would probably do what you're after) for just a few thousand dollars. Re-certified hardware qualifies for vendor support and can be purchased through various outfits such as www.berkcom.com or www.bltserv.com.
(Disclaimer: I have no affiliation with either vendor but am a satisfied customer of BLT Services. Berkcom was recommended to me when I needed something that BLT didn't have).
Best Answer
Your only option is to put TempDB on a shared disk resource, meaning the SAN. Standard disk I/O contention is what you're concerned about, moreso for TempDB since it's a central bottleneck for the entire instance.
As for how many files for TempDB, see Paul Randal's post on this subject. He's responsible for the storage engine, so he is THE expert on the subject: http://www.sqlskills.com/BLOGS/PAUL/post/A-SQL-Server-DBA-myth-a-day-(1230)-tempdb-should-always-have-one-data-file-per-processor-core.aspx