Following on from a recent post I made about a SharePoint health
analyzer rule that can be used to automatically expand a SharePoint
content database outside of normal working hours, I wanted to
create a solution for monitoring content databases growth over time
via central admin. Here's what I came up with:

The solution consists of four parts, the first
part is the Review Databases Sizes page shown above. The page is
accessed from a custom action under Application Management >
Databases:

The Review Databases Sizes page lists each content database
present in the farm, plus a spark line that shows the database data
file size and log file size over time. Clicking on the database
name or either of the spark lines shows the second
part of the solution, the Database Size Details application page.
This page will be displayed to you inside an SP.UI.ModalDialog:


The chart shown in the modal dialog (and the spark lines) are
created via the jqPlot jQuery extension and allow
for some nifty features such as data point
highlighting, animated rendering and zooming. Note: You may
need to check the jqPlot browser requirements to ensure this will
work in your environment.
To zoom into an area on the chart simply click and then drag a
rectangle that contains the data to be explored:
The chart will be re-rendered to display just the data points
contained in the area you selected.
After you've zoomed in, you can examine individual values by
hovering your mouse over a data point or you can zoom back out to
the full chart by double clicking anywhere on the chart.

The third part of the solution is the
deployment of the jqPlot JavaScript libraries themselves. The
required libraries are deployed by a SharePoint feature and use ScriptLinks to add themselves to the master
page of central admin without updating the master page itself. I've
used this simple and powerful method to deploy jQuery libraries
before and more details about can be found here: Use jQuery in SharePoint without updating your
MasterPage
The fourth and final part of the solution is a custom timer job
that is set to run once a day sometime between midnight and 1am.
Its called 'SPHealth Database Size Collection':

The timer job finds each content database in the farm and
demines the size of the database data file and log files for each.
The sizes are then stored in the property bag for each content
database.
That's it - two application pages, a timer job, and a couple of
module files. :)
I've published the source code to the solution at http://sphealthdbsize.codeplex.com if you want
to have a poke around and try it out for yourself. Caveat: Before
you deploy this in a production farm, just like any other third
party solution, I would recommend you review and understand what
the code is doing before you use it. Also note the following, it
may take a couple of days before you see any charts as the timer
job will need to have run twice to have collected enough data
points to plot!
Enjoy…
Brian
Cartmel is a Microsoft Certified Master for SharePoint 2010 who
specialises in designing, developing and promoting solutions built
on the SharePoint platform.
Why not keep up to date with the latest SharePoint content
by joining our community or by
following us on twitter or Facebook!