In the last months I have done a lot of SQL Server consulting engagements where I
have seen the craziest performance problems and learned how to solve them effectively.
Sometimes these problems occurred because of misconfigured hardware (mostly because
of I/O subsystems), but almost every problem also had some source in the development,
maybe a developer hasn't tested his/her code against a production workload, maybe
the developers haven't thought carefully about indexing strategies or even locking
and blocking scenarios with concurrent users.
Because I have a strong background in development in combination with SQL Server I
know exactly WHERE and WHY those problems are introduced. The short answer is very
simple: for developers SQL Server is just a simple black box: you feed SQL Server
with a query, and sometime later SQL Server returns you
the result of the query. The key word here is sometime:
sometimes it takes a few milliseconds to execute a query, sometimes it takes a few
seconds or even minutes to execute the same query! For me, SQL Server was also a big
black box for several years. I didn't have understood the inner workings of SQL Server,
but I was able to write SQL Server based applications, because the tool support that
Microsoft provides for developers is just amazing. But that's only the half of the
truth. There is more that you HAVE to know about SQL Server, so that you are able
to write better, scalable, and great performing SQL Server based applications.
For that reason I'm also offering custom SQL Server trainings, where I'm showing developers
(and also DBAs) how SQL Server really works, and what are the pitfalls when you are
working and developing with SQL Server. I have done such a training for HiCo (see http://www.hico.com)
in Austria. They are developing and selling a large .NET application that is based
on SQL Server, and in the last months they wanted to improve the performance and scalability
of their application, so we have organized a 5-days long training where we went through
all the most important core concepts of the relational engine of SQL Server, and how
you can troubleshoot them, when you experience serious performance problems.
But by now I want to stop writing, because I few days ago I had the chance to meet
again with Hannes – one of the Senior Software Developers of HiCo – who attended the
training. We had a little chat about the training, and how it helped him and his company
to improve their SQL Server know how, and how they can now relate this know how when
they develop new features for their software. Here are some of the questions that
I have asked Hannes, along with his answers.
In which area your company is using SQL Server, and what was your background
on it, before you attended the training?
Our usage of SQL Server is primary as a repository for storing structured documents
(XML, SGML), in our application. Our application uses current technology like WCF
(Windows Communication Foundation) and WPF (Windows Presentation Foundation) and supports
a large number of users and workflows to create technical publications, according
to standards like S1000D (see http://en.wikipedia.org/wiki/S1000D).
It's a requirement of our customers to support the Oracle database engine too, so
we use nHibernate as an O/R-Mapper. Our initial background on SQL Server was "install
it and use it to store our data". We did not care about internal mechanism of SQL
Server – in fact we used it as a "black box to store data".
How would you rate your knowledge about SQL Server after attending the
training?
The training gave us a "different look" at SQL Server. After the training it is
no longer a "black box" for us.
Why your company has chosen to take an advanced SQL Server training?
We wanted to gain knowledge about how to make performance optimizations and how
to solve "database problems" – to be more specific: we had some serious locking problems
in our application.
Was it worth enough for you and your company to attend the SQL Server
training?
For me, as a developer, it was more than worth enough, because I gained a deeper
understanding and know "where to start searching", if I encounter problems according
to the database. Four our company – as far as I can tell – it was worth too. Our mission
is to provide high quality software for our customers and this naturally includes
great performance and responsiveness of our applications. Since the database has a
great impact on performance, it is important for us to be able to solve performance
issues and locking problems.
What was the biggest "wow" effect you had during the training?
This in fact – for me - was something, not related to "performance or locking
problems". It was, how important it is to set up a stable backup strategy and what
happens, if you set up no backup strategy at all, because that IS, what you do when
you use SQL Server as a "repository to store my data" and that's all you care about.
Another very interesting point was the internal handling of indexes and what you should
not do, when you want to "optimize" database indexes.
How often you had in your day-to-day work referred back to the provided
training material and the notes you have taken during the course?
Because Klaus gave us his training materials, we are able to review them whenever
required. Since the training, I did not required to review the training materials,
but I know where to look, when I have to. The training definitely had influence on
how I design database tables now. In contrast to designing tables before the training,
I no longer use VARCHAR(MAX) columns for fields, that store a maximum of 500 bytes J
Which module was the one, that helped you the most in your day-2-day work?
The reason why we took the SQL server training, as already mentioned, was because
we encountered locking and performance problems. The recipes how to solve these problems
helped us most in our day to day work.
Would you recommend the training to other .NET/SQL Server professionals,
and if yes, why?
I would definitely recommend the training to all developers that use SQL Server
in their applications. It changes your point of view from "something to store my data
in" to "I know how my table design affects performance" and now I can read and understand
execution plans, and know how to do troubleshooting with them.
What do you want to tell other blog readers about the training?
If you use SQL Server in your applications – this is the course you have to take J
Wow, that sounds pretty good! Hannes and his co-workers really have enjoyed my SQL
Server training, and they have learned a lot that they can now use in their day-2-day
job. If you also want to have the experience that Hannes has enjoyed, I'm providing
my "Advanced SQL Server Performance Troubleshooting Workshop" to you, starting with
September across Europe. See http://www.csharp.at/events.html for
further information.
This workshop is a "compact" 3-days long advanced training about serious performance
problems/bottlenecks that you WILL encounter in your SQL Server production systems.
We will have a look on how to find and identify those problems, and – of course –
how to solve them. I'm currently providing the public course training in Austria and
UK, but other countries like Switzerland, Germany, Norway, etc. are already in my
pipeline.
If you are not able to attend the training, because of time constraints or other reasons,
you can also drop me an email,
so that we can arrange a customized in-house SQL Server training for your company.
Thanks
-Klaus