Home > Articles > Data > SQL Server

SQL Server Reference Guide

Hosted by

Creating and Maintaining a SQL Server Configuration History, Part 1

Last updated Mar 28, 2003.

In a previous tutorial, I explained the importance of change management. For each system that you are responsible for, it is vital that you understand the configuration of each component so that you can optimize, troubleshoot and protect the system.

And it's not just troubleshooting the system or performance tuning where a record of the system's current configuration and its changes is helpful. This record can also help you recover quickly in case of a natural or man-made disaster such as a hurricane, flood, fire and so on. If you lost your entire system today, just having the tapes handy won't be very useful if you don't know what the service pack was on your operating system or even what kind of tape drive you had. You need this record in hand and somewhere safe.

To do that, you need to "baseline" the system. Baselining is the process of recording the system's state at a particular point in time, normally when you first set up the system.

Sometimes it isn't possible to baseline at the system startup, because you may have inherited the system after it was already running. Perhaps no one took a baseline before they put it into product. In that case, you can baseline the system when it is at its quietest period, whatever that is for your situation.

In part one of these tutorials I'll explain the type of data you might want to capture and the sources of that data. In the second part I'll give you the process for the design of the database to hold the data, and an automated process to collect it. For this tutorial I'll worry more about the "what" and in the next I'll explain the "where".

One note before we get started — there are products on the market from Microsoft and other vendors that will perform this task for you. If you have access to those tools and you only work in locations where they exist then you can save yourself some time and effort by using them. I've had the privilege of using System Center Operations Manager from Microsoft, and products from Redgate, Quest and Idera. All of them have strengths and weaknesses, and all of them do a fine job.

I do feel that even if you use another product, it's good to know the process to create a baseline recording system yourself. If you change companies, you may not have access to the systems you had before. You also may need to customize the tools you do have to include data that they do not natively capture. At the very least you'll know what the systems are collecting and an idea of how they are getting the data.

Types of Data to Capture

You can record the system' configuration and take a separate set of measurements for performance tuning. I combine these two, since having both sets of information in one place is useful for planning system growth.

As I've mentioned, there are two types of data that you will want to record about your systems: Static Configuration and Dynamic Information.

"Static" configuration data is the information about your system that does not change, or does not change very often. Of course, almost everything about a system changes over time, but the data you're collecting here doesn't change frequently.

At one shop where I worked, there was a significant lag time between "asset" purchases. That meant that the organization would only authorize large purchases after a lengthy process. The problem was that my systems would become obsolete before the purchasing cycle. So what we did was to buy our server hardware and build it ourselves — something I don't recommend as often today. I would assemble the system and it would get an "asset tag." By using off-the-shelf components, I could "repair" the system one component at a time and eventually refresh the server every three years. Ah well — the games we play!

"Dynamic" information, unlike my components in the servers, changes very frequently — either by the minute or even by the microsecond. The primary differences between static and dynamic information is how often the information is collected, how it is used, and consequently how it is retired or archived.

Let's take a look at each kind of data and what sources you have to get it.

Static Configuration

I define "static" data as that information which is important to know, but changes in less than a week at a time. By that definition, the first set of information is on the system hardware configuration, the Operating System and the Service Packs and Patches, along with any drivers or driver updates.

The use for this kind of data is to rebuild the system in the case of an emergency, to identify the organization's assets for balance sheets, and to plan for capacity and growth. As the "System Administrator" part of your DBA role, you'll need to stay up to date on the latest technology, so that you'll know when to change a particular CPU or memory type for another. Although you could just always buy and install the latest hardware, neither your budget nor your downtime schedule would probably allow it.

But it might. In a move that signals another direction, Google routinely installs smaller, less expensive computers that work in parallel. When one goes bad, they simply replace it and move on. In this case, what might normally be considered "static" information is now dynamic!

System Hardware Configuration

The first bit of information to gather is the system configuration of the hardware itself. You can get this information in several ways — you can manually enter it, you can run the WINMSD command in certain operating systems or look at the "properties" panel in others, or you can enter the data from the shipping manifest. I actually prefer the latter because it is authoritative, it has all of the information I need, and it even has part numbers. That can be extremely valuable when you're looking to upgrade or replace a component later.

Operating System Information

This bit of information is quite easy to obtain — once again you can enter it manually from your own knowledge, run the WINMSD or WINVER commands, or from the shipping or purchasing manifest. In this case I use the WINVER command most often, since it has the entire range of numbers behind the version, which is useful for support, replacement and so on.

You can also get a subset of this information from SQL Server itself — simply run the EXEC xp_msver command in SQL Server and the system will report the major version of the Operating System as well as other useful information that we'll see shortly.

One further piece of information I include in my baseline is the license information. If you're concerned that others might see it, then you can certainly use an encrypted column to store that, but it is very useful to have when you call support or need to rebuild the system.

Service Packs and Hotfixes

In addition to the base operating system version and edition, I also track the Service Pack and Hotfixes installed on my system. Once again, this is useful for troubleshooting and rebuilding purposes.

For the operating system, you can use the WINVER or WINMSD commands. I'll explain how to find the SQL Server version in a few moments.

Drivers and Driver Updates

Often overlooked, I make sure I collect the version of the drivers I have installed, especially those I had to install or update manually. WINMSD will help you with that.


You'll also want to collect the information for SQL Server, including the version, service packs and so on. I've described how to do that in this article on Service Packs.

But the version and service packs aren't the only configuration information you want to collect. You also need to know how the server is configured, and how each database is set up.

To get the server configuration, use the sp_configure command. Make sure you show all options first, and then run it without any options:

EXEC sp_configure ’show advanced options’, 1



EXEC sp_configure


That will show you what you want to collect.

You can also use the SERVERPROPERTY() function to retrieve just about anything you need to know. You can find the documentation for that function here.

For the database, you can list the properties using the DATABASEPROPERTYEX() function, which you can read about here. There are other methods to get database information, but we'll stick with those for the moment.

Dynamic Information

If static information changes only on the order of a week or longer, dynamic information changes in a much shorter time — sometimes in less than a second.

There are a few primary categories you'll want to watch. There are CPU, memory, network, disk and platform counters that you can set and watch for your system.

I've written a tutorial on the Performance Monitor (now called the System Monitor) counters you can use for SQL Server. In the next tutorial I'll show you how to capture and write them to a database.

I also use SQL Server's Dynamic Management Views (DMV's) and Functions to show performance counters for those objects, plus the SQL Server-specific counters as well. I've written another tutorial for that, and once again in the next installment I'll show you how to write those to the baseline database.

InformIT Articles and Sample Chapters

There is more about monitoring the SQL Server Enterprise in this free sample chapter from the book SQL Server 2005 Distilled.

Books and eBooks

You can read more about this powerful tool in the book Inside SQL Server 2005 Tools, by Michael Raheem, Dima Sonkin, Thierry D'Hers, Kami LeMonds.

Online Resources

Microsoft has all the docs for this tool right here: http://msdn2.microsoft.com/en-us/library/ms173494.aspx.