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 have heard that storing indexes on a different filegroup and drive increases performance in a database because the drive doesn't have to go back and forth between the index and the data to which the index refers. I have also heard that this is a myth.

When is it advisable to store nonclustered indexes on a separate filegroup and drive? What perfmon/profiler evidence would lead me to arrive at that conclusion? Does hardware play a role in the decision (whether a RAID/SAN is used over a single drive)?

share|improve this question
add comment

5 Answers

up vote 6 down vote accepted

The slowest part of a DB system is the disk drives. Eliminating bottlenecks at the disk level will improve performance. When data is being looked up and an index is used, the index is first looked up and then the corresponding data is fetched. If both the index and data are on the same disks, then there is some contention happening. Whereas, if the data were on a different (physical) disk, then there is faster IO happening, thereby increasing performance. The main part to note is that the data or index are on separate physical disks or LUNs.

You would use such a scenario if you need to get better performance out of your system, provided you have the disks. For your perfmon counters you could use Physical Disk – Avg. Disk sec/Read, Physical Disk – Avg. Disk sec/Write, Physical Disk – Disk Reads/sec, Physical Disk – Disk Writes/sec to have a before and after comparison of your changes.

share|improve this answer
add comment

It is certainly true that spreading your simultaneous I/O between different drives will increase performance - that is no myth. It is a myth is that doing it twice will improve performance again.

If you SAME, then splitting your array up into two partitions and putting indexes on one and tables on another is a waste of time.

share|improve this answer
    
I agree, but I do not beleive that this is what he was asking. –  NTDLS Jul 27 '11 at 17:24
    
The question asked: "Does hardware play a role in the decision (whether a RAID/SAN is used over a single drive)?". My answer basically is: If you RAID, don't bother splitting indexes and tables. Which is not to say you definitely should even if you do not have RAID... –  Jack Douglas Jul 27 '11 at 18:21
add comment

Separating Indexes from data onto separate filegroups = performance improvement is highly debatable. The performance improvement "may" happen if you have the underlying hardware to support it but just by the fact that separating them to different filegroups doesn't give you perf boost. And it is also NOT easy to measure the perf boost because of this.

Ref: http://weblogs.sqlteam.com/dang/archive/2008/08/01/Are-you-a-DBA-Monkey.aspx

You should ask the question first. Why do you need to do this?

  1. Are you looking to improve the performance of backups by NOT including the indexes?
  2. Are you looking to improve the performance of reads & writes to these indexes?
  3. Are you doing this for a better manageability of placement of the underlying objects?
  4. Do you have large volumes of data that have varying needs for performance?
  5. Are you looking to use SSD's for non-clustered indexes to improve performance etc...

I looked at this task to support the need for #5 in the above list and it seems like a good proposal to me although we haven't acted upon that yet.

Note this decision is NOT that easy to make and you need to figure out what you are trying to do and make sure you have the hardware to support. Don't make changes like this unless you have tested well and you see a significant boost in perf otherwise you might as well drop this idea. It's NOT worth it if you are expecting perf boost by simply separating the indexes onto separate filegroups.

share|improve this answer
    
I like Dan's article :-). I guess it happens to all of us to import old corporate standards and at some point in time to question it's usefulness. –  Marian May 11 '11 at 9:03
add comment

I'll tell you my personal experience regarding this item. The non clustered indexes should be stored on a separate filegroup when the current disk drive is not big enough for the needed space :-). You can laugh about it.. but it happens.

So an emergency fix for us, when we were about to remain without free space on a data drive, was to create a nice script to recreate all non clustered indexes online on a new filegroup on a drive with free space. One would think it's easy and fast to buy new storage.. but it's not like that, really.

Regarding performance we didn't see anything out of the ordinary after the move. But it's a big SAN storage box where everything is held together :-).

share|improve this answer
add comment

In general; splitting data and indexes onto separate similarly performing disks can increase performance for substantial write operations to that table or large read operations that utilize that index. A similar methodology to some other I/O operations, like a partitioned table spread across multiple physical disks.

However it is also largely dependent on the storage. For example; if you have a server with a nice Fushion ioDrive (or something similar) and also has individual spinning disks. It might more beneficial to keep everything on the ioDrive (unless space is limited). There are also other things to take into consideration - RAID configuration, network storage configuration.

Do some bench marking either on a testing server with similar hardware or (only if a secondary server is not an option) during non-peak hours with a temporary data. The DBA-Monkey link by Sankar above is good food for thought.

share|improve this answer
add comment

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.