Professional Documents
Culture Documents
DBAs Checklist For Designing and Reviewing SQL Server System Architectures
DBAs Checklist For Designing and Reviewing SQL Server System Architectures
com/) MENU
By: Sadequl Hussain (/sqlserverauthor/44/sadequl-hussain/) | Updated: 2014-02-13 | Comments (8) | Related: More (/sql-
server-dba-resources/) > Database Administration (/sql-server-tip-category/60/database-administration/)
(/sql-server-webcast-signup/?id=887&src=tip)
Free MSSQLTips Webinar: Troubleshooting the most common SQL Server Problems (/sql-server-
webcast-signup/?id=887&src=tip)
In this educational webinar, we will cover some of the common issues you may face when working with SQL Server and some of
the ways you can troubleshoot these issues.
Problem
DBAs are often asked to design and plan database infrastructure for new applications or
upgrade existing systems (/sql-server-
tip-category/24/upgrades-and-migrations/). To propose a new solution or verify an existing architecture, a DBA must have a clear
understanding of the system's requirements. In this
tip, I will try to list a few areas DBAs need to cover when they are designing
new systems or reviewing proposed solutions.
Solution
Of the many hats an experienced DBA wears, one is that of a system architect. Development DBAs often spend their time
reviewing detailed technical specifications, understanding pseudo-code and flow-charts
then validating database object
structures. They advise developers about
missing table indexes (/sqlservertip/1634/using-sql-server-dmvs-to-identify-missing-
indexes/),
creating re-usable functions (/sql-server-tip-category/160/functions--user-defined-udf/) or benefits of using
table
variables (/sqlservertip/2825/sql-server-temp-table-vs-table-variable-performance-testing/).
An infrastructure DBA on the other hand, may not always have in-depth knowledge of the application. Instead, he will have broad
knowledge about the enterprise application landscape. He needs to understand what applications are in production, what
database back-ends are used, how storage and virtual servers are provisioned, among other things. If you think of yourself as an
infrastructure DBA, here is a sample of tasks you could be asked to do:
A new, third-party supplied document management system is being implemented in your organization and it's based on
the
SharePoint platform (/sql-server-tip-category/69/sharepoint/). The vendor is doing all the hard work and they have come up
with a detailed architecture document. The work will begin next week and all the parties have agreed it's a good design. You
have been brought on board at the last moment and asked to review the architecture. You need to give the final verdict
whether the design conforms to good database practices.
After months of development, testing and polishing off, the company is ready to take the next big leap as version 2.0 of a core
application is ready for rollout. You need to suggest what will be the best path for a smooth migration. Also, what will be the
rollback method?
Management has at last given the green light to an application enhancement project and the project manager has kicked off
weekly meetings with developers, architects and DBAs. A lot of brainstorming and whiteboard drawings are happening and
people want to know what would be the best configuration for the database server.
Savvy DBAs should be able to look at a system's design and suggest the best solution for the database tier or recommend any
better approach. The DBA should also be able to architect the database layer from scratch and be able to support his design. The
key thing to do is to understand the purpose of the system and gather as much information as possible.
That's why it's best to have a list of questions and metrics available at hand. Having said that, not every project will have an all-
encompassing, well rounded set of specifications. As the DBA asks his questions, not all the answers may be readily available.
This can range from "we don't know, you tell us" to outright blank stares from around the meeting table. The DBA needs to take
note of those unknown areas, suggest possible solutions or inform and educate his peers.
In the following sections, I will try to list some of the checkpoints DBA can refer to.
Purpose
First of all, try to understand the system's function and what will it be used for. In other words, get some background information
first.
Consider items such as:
Understanding the purpose and the importance of the system will help you determine the best possible configuration and
resource requirements. For example, you would not want to recommend fiber channel disks for a system that would be seldom
used by few users.
Some of the architecture components may not strictly fall within DBA's domain, but you still need to
be aware of including:
Where will the SQL Server be located? Behind a corporate firewall or in the DMZ?
If the latter then what account would you need to access it?
What account will be used for the service start-up?
Think about load balancing. If it's going to take simultaneous hits from a few thousand connections, where is the load
balancer?
Is an F5 or NetScaler component shown in the diagram?
Are there multiple app servers available before the database tier?
Looking at the architecture, you may often be able to suggest a simpler, easier solution tailored for your organization. In one of
the projects I was working on, the vendor had come up with a detailed specification for the database server of an antivirus
system's backend database. The solution was the best-of-breed: it called for failover clustering and implementation of a remote
DR site for protecting the database.
Here are some key questions I asked:
I knew where I was going put that database and I told them. It would be hosted in a server with ample power, but it would be co-
hosted with other third-party databases of similar kind. The database would be fully backed up every night. It would be
have
DBCC's checked every week (/sql-server-tip-category/76/database-consistency-checks-dbccs/) and it would also have
indexes
reorganized and its statistics updated (/sql-server-tip-category/25/maintenance/). As for site recoverability, the server was a VM,
protected by VMWare vMotion and clustering. The underlying storage system was already replicating to a remote DR site.
They agreed to my proposal and to this day, the database is running fine.
For SAN LUNs, you would want to ask your storage engineers about the network speed of the LUNs to the VM. For a purely VM
based solution, you would want to know if there is one or more underlying hosts connected in a cluster. For VMWare-based
systems the clustering model would help protect the VM through a mechanism called vMotion.
Similarly, how many drives will be mapped? Personally, I still like a logical separation between data and log files and want to keep
them separate from the rest of the system. For a database server, I would want:
Now why would you go to all of this trouble discussing these things with your server engineers? Well, think about the next set of
questions.
Is this a business critical, top tier application? Or is this something the business can survive without for a few hours or a few
days?
The answer to this question will help you determine the resource requirements for a server.
A mission critical application calls for the best possible I/O from its storage engine and the fastest speed from its network link. It
will need regular backups and possibly a failover option too.
The same features may not be necessary for a mid-level, non-critical stand-alone server.
If you know you are dealing with the design of a tier 1 system, you would want to ensure you have done everything in your
power to allocate the best resources for it.
How much memory will be allocated? The choice of memory will depend on the load and the use of the system. For a complex
data warehouse doing a lot of number crunching and reporting, you would want to allocate plenty of memory for SQL
Server,
Analysis Services and Reporting Services. For a simple server hosting less than ten small databases you could probably be
happy with 8 GB of RAM.
Ask about the system's peak load. How many connections will hit the database server simultaneously? The answer will potentially
help determine the amount of RAM you would assign to SQL
Server. As SQL Servers processes more and more queries, it would
perform best if it has plenty of cache to store the data.
Check with your server administrators about the network speed. Will the system be connected to a 1 GB link or a 10GBpS link?
The choices become much simpler if it's an upgrade or migration. You know you have a baseline from the existing environment.
You would want to mark that as a minimum requirement.
Start with perhaps the most basic one: what will be the server's name?
Will it be a default instance or a
named instance (/sqlservertip/2661/how-to-connect-to-a-sql-server-named-instance/)?
What
versions (/sqlservertip/1140/how-to-tell-what-sql-server-version-you-are-running/) and
editions
(/sqlservertutorial/2202/choosing-a-version-of-sql-server/) of SQL Server are being considered?
Is it only a
SQL
Server Express Edition (/sql-server-tip-category/111/express-edition/) system?
Then why is it being installed in a full-blown server?
Is this Enterprise Edition?
Then have the cost implications been considered?
Why does the architecture ask for an Enterprise Edition setup?
Is it for the ability to access more than 64 GB of RAM?
Is it for an Enterprise Edition-only feature?
Are we installing the latest version of SQL? If not, why?
In most cases this happens for third-party apps. These applications are often not certified to be compatible with the latest
versions of SQL
Server.
The question of technical support eligibility from Microsoft then needs to be considered.
The same can be said about service packs. You may want to rollout the latest patch, but before you do so, check with the
application's specifications.
What components of SQL Server need to be installed and what features need to be available?
Does the solution call for
SSAS and SSRS (/sql-server-business-intelligence-resources/) to be installed as well?
Will it make more sense to propose a separate server for those services?
Will there be any other application installed on the SQL Server box?
What do those applications do?
Why can't they be separately installed on different servers?
Who would be installing those applications and services?
How do you monitor those applications?
Will those applications use a specific account to connect to SQL Server?
If so, what sort of access would it need?
Finally, here is a question for your project team lead or the integration leadership. Has there been a commitment for the licensing
cost of SQL Server? Will it be CAL or core based license? Has the client agreed to pay for it or is this something you or your team
does not need to worry about? In many cases DBAs are not supposed to raise questions about this - but if you are in doubt, ask.
Will
filestream (/sql-server-tip-category/92/filestream/) data be used?
Is
Data Quality Services (/sqlservertip/2575/getting-started-with-sql-server-2012-data-quality-services--part-1/) or
Table
Partitioning (/sqlservertip/1200/handling-large-sql-server-tables-with-data-partitioning/) part of the architecture?
What will be the
collation (/sqlservertip/2513/identify-sql-server-instance-and-database-collation-using-tsql-and-ssms/) order for
the SQL Server setup?
Should any particular configuration property be changed to a specific value?
For example, the application may call for the
MAXDOP setting (/sqlservertip/2650/what-maxdop-setting-should-be-used-for-
sql-server/) to be changed to 1.
A specific user may need to be made an Analysis Server administrator or have full access to the OLAP database.
A certain Windows AD group may require Content Browser role membership in Reporting Services.
Legacy code could require that
xp_cmdshell (/sqlservertip/2987/can-i-stop-a-system-admin-from-enabling-sql-server-
xpcmdshell/) is enabled.
What about protocols and aliases?
If the server is a replacement for an old system and has a different name, should an alias be created?
Should the network administrators be advised about DNS changes?
What
Linked Servers (/sql-server-tip-category/56/linked-servers/) need to be created?
Where do those Linked Servers point to and what security credentials should they use?
Do you need to create credentials, proxies and operators for the jobs?
Will the server need to have ODBC connections created?
If you are creating databases, know the order in which they have to created.
You will also need to know the number and size of the databases. Why? Because that would help you define the storage size
and design the disk layout.
If it's a data warehouse or data mart, you know the size will grow bigger and bigger, so you would want to start with ample
space in the data and log drives.
If backups are saved on the same machine, you know you will need a dedicated volume for backup files.
If it's a high-transaction OLTP site, you would want a dedicated volume for tempdb files.
Can the databases be split across multiple servers for efficient operation or would a consolidated environment deliver the
best results?
Again, many of these questions won't be answered for you. A DBA will need to use his own judgment and experience to suggest
and recommend an optimum solution. Sometimes this will not be called for: the decision would have been made for you, but you
still need to raise your points if needed.
Check for any specific database properties required. This is different than the SQL Server configuration properties. For example:
What
jobs (/sql-server-tip-category/27/sql-server-agent/) will be created in SQL Server?
Will they be created by application engineers or the application installer itself?
Will it require a DBA's support?
What will be the function of those jobs?
Are they going to invoke
SSIS
Packages (/sql-server-business-intelligence-resources/)?
Will they require elevated permissions for running
xp_cmdshell (/sqlservertip/2987/can-i-stop-a-system-admin-from-enabling-
sql-server-xpcmdshell/)?
How would they be log their output?
Who troubleshoots them after a failure?
All these points will affect the choice of things like user accounts, credentials, proxies and so on.
Take the example of a SharePoint farm. DBAs may not be required to implement backups for the backend.
This can be initiated
from the application and that's what you might be told - that the SharePoint administrator would be taking care of the farm-wide
backup. Another good example is a BusinessObjects farm. The BO administrator may have a Windows job that backs up both the
file system repository and the configuration database to keep them in synch. The DBAs then don't have to backup the databases
separately. Same would be the case for other customized or third-party solutions.
Where and how would the databases be backed up? Is it going to reside in the same server or a remote location? Is it through
a
proprietary application (/sqlservertip/1070/simple-script-to-backup-all-sql-server-databases/) or a regular
maintenance job
(/sql-server-tip-category/25/maintenance/)?
How many days' worth of backup need to be available? Is there enough space in that location?
li>WWhat's the frequency of
backups? Is it full backup once every day, once every week or once every month (for static databases)? Should there be
transaction log backups (/sqlservertutorial/8/sql-server-transaction-log-backups/) happening?
When would the backup start and approximately how long would that take? Would it impact system performance significantly?
/li>
IIf you are reviewing an architecture document, make sure the author has addressed these questions there. If you are writing the
database architecture document yourself, ensure topic has been covered.
Answers to these questions will help you identify teams and individuals you may need to work with in the future.
Conclusion
As you can understand, this is not an exhaustive list by any means. Every system is different and so is every architecture.
Ultimately it's about how your organization does business, what it considers critical and how you manage your own database
systems. As I said before, sometimes you would not have an answer because people don't know the answer. You would need to
use your own judgment and experience to come up with your own recommendations. Sometimes you would be expected to know
what to do. Fair enough. Use your standard DBA practices in such cases.
Not all the points from this article may be necessary in every situation. For example, you may not need to ask any question at all
in a straightforward server migration project where everything has been decided before you came on board. As you work through
multiple projects, you will eventually get into a habit of asking the most relevant questions. To start off, you can use this article as
a base template.
Next Steps
Start creating a template or questionnaire for your next project's architecture review.
Use simple YES/NO, checkbox, one-line answer sort of questions.
Use this document for your architecture reviews, Q/A sessions, brainstorming or requirement gathering sessions.
Refine the document as you progress from one project to another. Some questions may be redundant, while new questions
may be added.
Make sure stakeholders, clients, peers and other DBAs are familiar with your approach with this document
Once this has become an integral part of your DBA interview technique, you can circulate it before any meeting so your peers,
clients, stakeholders and engineers can pre-fill the document for you.
Related Articles
How to rename a SQL Server database (/sqlservertip/1122/how-to-rename-a-sql-server-database/)
Determine Free Space, Consumed Space and Total Space Allocated for SQL Server databases (/sqlservertip/1629/determine-free-space-consumed-space-and-total-space-allocated-for-sql-
server-databases/)
Move SQL Server transaction log files to a different location via TSQL and SSMS (/sqlservertip/1774/move-sql-server-transaction-log-files-to-a-different-location-via-tsql-and-ssms/)
Script to Get Available and Free Disk Space for SQL Server (/sqlservertip/2444/script-to-get-available-and-free-disk-space-for-sql-server/)
How to find user who ran DROP or DELETE statements on your SQL Server Objects (/sqlservertip/3090/how-to-find-user-who-ran-drop-or-delete-statements-on-your-sql-server-objects/)
Renaming Physical Database File Names for a SQL Server Database (/sqlservertip/4419/renaming-physical-database-file-names-for-a-sql-server-database/)
Copy a SQL Server database with just the objects and no data (/sqlservertip/4664/copy-a-sql-server-database-with-just-the-objects-and-no-data/)
Execute SQL Server Script Files with the sqlcmd Utility (/sqlservertip/4924/execute-sql-server-script-files-with-the-sqlcmd-utility/)
Popular Articles
Date and Time Conversions Using SQL Server (/sqlservertip/1145/date-and-time-conversions-using-sql-server/)
Rolling up multiple rows into a single row and column for SQL Server data (/sqlservertip/2914/rolling-up-multiple-rows-into-a-single-row-and-column-for-sql-server-data/)
How to tell what SQL Server versions you are running (/sqlservertip/1140/how-to-tell-what-sql-server-version-you-are-running/)
Using MERGE in SQL Server to insert, update and delete at the same time (/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/)
Ways to compare and find differences for SQL Server tables and data (/sqlservertip/2779/ways-to-compare-and-find-differences-for-sql-server-tables-and-data/)
Searching and finding a string value in all columns in a SQL Server table (/sqlservertip/1522/searching-and-finding-a-string-value-in-all-columns-in-a-sql-server-table/)