Well, with the name “blobeater” it was about time I did another post on CHECKDB.
This time I want to talk about another strategy that you could use to manage CHECKDB on your TB sized databases – something that I actually do.
My bigger databases use partitioning that are stored on separate filegroups.
Let’s assume we have – Primary (obviously), AWS and LAM. I make use of the fact that my database has multiple filegroups so I then use DBCC CHECKFILEGROUP. This checks the allocation and structural integrity of all tables and indexed views in the specified filegroup of the database as stated by Books on Line.
So I issue:
USE Mydb GO -- Primary day 1 DBCC CHECKFILEGROUP; GO DBCC CHECKCATALOG --other FileGroups Day2 DBCC CHECKFILEGROUP ('AWS') GO DBCC CHECKCATALOG --other FileGroups Day3 DBCC CHECKFILEGROUP ('LAM') GO DBCC CHECKCATALOG
You may be wondering why I am issuing the CHECKCATALOG separately. Well this is because only CHECKALLOC and CHECKTABLE are done via CHECKFILEGROUP so you really should be doing CHECKCATALOG independently too. This approach gives you the ability to spread the burden over a couple of days rather than all in 1 day / window.
Just be aware of this bug http://www.sqlskills.com/blogs/paul/dbcc-checkfilegroup-bug-on-sql-server-2008/
If you do not have filegroups you could spread CHECKALLOC, CHECKCATALOG and CHECKTABLE over X days – I have some code that does this – https://blobeater.wordpress.com/category/sql-server-2/development/