Question

One of our corporate standards to is have a separate filegroup/file for user tables/indexes. This is set as the default so no need to qualify CREATE TABLE statements.

So it looks like this

  • fileid 1 = system tables, MDF
  • fileid 2 = t-log = LDF
  • fileid 3 = user stuff = NDF

Can anyone here help me understand the original justification why this was mandated?


I'll come clean and state I think it's voodoo. Am I wrong...?

Edit: I am aware of how to use filegroups for separation of indexes/partitions/archives, as well as how to restore piecemeal. This question is about the use of a separate filegroup on the same volume for system tables only.

Was it helpful?

Solution

Microsoft's 70-432 training book says "The main reason not to place any of your objects on the primary file group is to provide as much isolation in the I/O as possible. The data in the system objects does not change as frequently as data in your objects. By minimizing the write activity to the primary data file, you reduce the possibility of introducing corruption due to hardware failures. In addition, because the state of the primary filegroup also determines the state of the database, you can increase the availability of the database my minimizing the changes made to the primary filegroup."

So, take that as you will. Others say this is not necessary in certain circumstances and of course is more to maintain. Just thought I'd provide Microsoft's reasoning.

OTHER TIPS

The isn't a performance gain to this, there is a recoverabily gain to be made. If file corruption happens in the system tables then the database is lost. If you keep the user data in a separate file group (or groups) then you can restore just those files keeping the rest of the database online during the restore (assuming Enterprise Edition here).

If this is why they state this, I can't say, but this would be a benefit of having multiple file groups with just the system objects in the PRIMARY filegroup.

You should however kick then in the junk for saying that AutoShrink should be enabled.

Not sure I understand, are you asking for someone to justify your corporate standard? I would think that whoever wrote that standards doc for your company would be able to shed some light as to why this would be done.

That being said, it is not unusual for some shops to want to break out system data from user data. And if used in conjunction with dedicated sets of disks, you could reap some performance gains.

Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange
scroll top