SQL Server Performance

  • Home
  • Articles
  • Forums
  • Tips
  • Training
  • FAQ's
  • Blogs
  • Software
  • Books
  • About Us
RSS Feeds
Sign in | Join


Article Topics

All Articles
Performance Tuning
Audit
Business Intelligence
Clustering
Reporting Services
Developer
General DBA
ASP.NET / ADO.NET

Write for Us

Share your SQL Server knowledge with others and raise your profile in the community More...
Latest Articles

Working with Windows Communication Foundation (WCF)
Transfer Logins Task and Transfer Database Task in SSIS
Practical Database Change Management (Part 2)
Practical Database Change Management (Part 1)

More     
 
Latest FAQ's

ALTER TABLE SWITCH statement failed because column '%.*ls' has data type ...
ALTER TABLE SWITCH statement failed because column '%.*ls' has data type ...
ALTER TABLE SWITCH statement failed. There is no identical index in ...
'%ls' statement failed because the expression identifying partition number for the ...

More     
   
Latest Software Reviews

Spotlight on ApexSQL Diff - Server-based database comparison tool ...
Spotlight on ApexSQL Data Diff - Server-based database comparison tool ...
Spotlight on ApexSQL Doc 2008
ApexSQL Enforce

More     

articles >> performance tuning >> An Exclusive Interview with David Gugick, SQL ...

An Exclusive Interview with David Gugick, SQL Server Performance Expert and Software Developer

By : Brad McGehee
Feb 29, 2004

Tell us a little about yourself.

I’m the president of Intrinsic Design, Inc., a software company dedicated to writing database analysis software for Microsoft SQL Server. After receiving my electrical engineering degree from the University of Michigan back in 1989, I took that knowledge and entered the world of software development. Initially, the database world was dominated by Ashton-Tate, and dBase was the database of choice. With the release of Sybase’s SQL Server 4.2 in 1992, I realized a very needed change was taking place in the database market; a move to a client-server model of computing. The paradigm shift was a welcome one, and opened the door to the possibility of more sophisticated and scalable applications.

For the next couple of years, I was responsible for designing applications and databases that ran on both the Sybase and Microsoft flavors of SQL Server 4.2. But my attention began to readily sway toward the Microsoft solution, not only for its seamless integration with inexpensive PC’s running Windows NT, but for it’s price-point. Microsoft made it easy for small companies and individuals to acquire SQL Server, and begin to develop sophisticated database applications. It seemed a necessary extension of my career back then to seize the opportunity.

 

Tell us about your company, Intrinsic Design.

Intrinsic Design was formed in 1995, initially as a consulting company. We developed applications for many clients using a variety of front-end tools, but primarily focused on Microsoft SQL Server as our database of choice. This was a very exciting time in the software industry. Microsoft SQL Server 6.0, a major upgrade to version 4.2, had just been released, and would soon be followed by version 6.5 a scant 10 months later. Windows 3.1 was everywhere and would soon be eclipsed by Windows 95 and NT 4.0 in corporate America, and client-server computing and development became the de-facto standard. And let’s not forget the Internet. It seemed there was no better time to start a company to tackle all this new technology.

In 1999, we began to focus our attention on developing commercial software. The development of Coefficient was a natural extension of our experience in the industry and a solution to one of the major problems we observed over the years at our clients; the difficulty of performing sophisticated SQL performance analysis.

 

Can you provide one or more examples of how your clients are using Coefficient in the real world?

We see our clients using Coefficient in basically two ways: to perform preventive maintenance and identify performance bottlenecks. Before explaining these items in more detail, I’d like to point out that Coefficient is not strictly a database administrator tool. It was designed to be used by software developers as well. 

Experience has taught us that while database administrators (DBAs) often have good control of the database design (tables, views, basic indexes, and constraints), it’s almost impossible for them to keep track of all the SQL that accesses all the databases they manage. The problem is, without understanding the queries that access a database, it’s impossible to predict whether a database will operate efficiently. As many have heard me say before, if you execute inefficient SQL on a database, you can easily kill server performance. To me, this is rather scary. It’s hard to believe that a $30,000 piece of hardware can be crippled by a single query or stored procedure. But it happens all the time. 

This is where the software developers come in. They use Coefficient during development to analyze their database activity on the development servers. They can then identify and correct any potential problems. And best of all, if they choose, they can do this independently of the DBA until they are ready to present the DBA with the set of changes for review. Since software developers are involved in most of the query creation, it only makes sense they should fine tune queries early on in the development process.

DBAs use Coefficient to monitor overall database activity or to identify performance problems. When working with developers, the DBA can schedule a Coefficient trace on the development/QA server to watch the developers/end-users hack away at the application before it rolls into production. The DBA documents the database activity using Coefficient. The first time, this creates a baseline. Future tests are compared to previous revisions to identify any performance changes (trend analysis). DBAs also use Coefficient in production to monitor the health of the production databases. Traces are run at various times of the day to document server load and activity. If necessary, during times of poor server response, the DBA uses Coefficient to document the activity and identify the responsible queries. The DBA would post all these analyses on the company’s intranet (or network) for easy future reference.

 

What factors, such as hardware, the client application, the network, SQL Server settings, database design, indexes, coding, etc, affect SQL Server's performance the most?

Anyone who’s been involved in database tuning is aware that a deficiency in any of those items can cause performance problems. In general though, the hardware and network tend to be less of an issue with overall performance. The reason I say this is because those “environments” are normally tightly controlled at a company. Purchasing hardware and designing a network are items that normally accompany close conversations with experts on the subject. PC manufacturers know how to design multi-processor servers and inexpensive clients, and there are industry standards for network design that most companies follow. So these items tend not to cause the majority of problems with SQL Server performance. 

I’d have to say that SQL Server settings are less of an issue these days, owing a lot to the auto-configuration Microsoft has built into SQL Server 7.0 and 2000. While it’s important to understand these settings and make minor modifications to them in certain cases, many administrators find the default settings adequate.

By far the most important items that have the potential to kill your SQL Server performance are indexes and coding. I’d like to touch on these items briefly.

I would define coding as the programming logic which an application uses to retrieve and process data on SQL Server, or the queries used to access data. Query performance is intimately related to the available indexes on the server. The problem stems from the fact that those individuals designing the queries and stored procedures to access and update data in SQL Server are often not the same individuals as those responsible for index and database design.

SQL queries to a server must not only be properly designed, but they must also have the necessary index support on the server. A flaw in either will cause a headache for all involved. When a query is issued, SQL Server determines how to best retrieve the data, using its knowledge of the underlying table structure, data, and available indexes. SQL Server returns the requested results regardless of how difficult it is to process the query. Ideally, you want SQL Server to access as few data pages as possible, and hopefully get those database pages from memory as opposed to disk. Disk access is hundreds of times slower than memory access. 

As is often the case when dealing with performance problems, SQL Server cannot always access the data efficiently. This may be the result of a poorly written query, a missing index, or both. From a software developers point-of-view, he/she creates a query and checks to make sure the results are correct. On a development server, with limited access and smaller data sets when compared to a production server, these queries will often appear to operate efficiently, even if they are not. Programmers are often not trained to investigate the underlying details of the query’s execution, and therefore, may not attempt to identify any hidden problems.

Imagine if you will, a query which is forced to do a table scan of a 10,000 row table on the development server. An average server can scan a table quickly enough that you may not notice the lag and identify it as a problem. Move that same query to a production server and you may be scanning a 1,000,000 row table. This is more noticeable, but still may not raise eyebrows. But compound that with the likelihood that multiple users are running the same query and you can imagine the tens of millions of rows SQL Server must continually scan to produce the correct result sets. These types of problems become systemic. The wait the end-users must endure while inefficient queries run eventually extends to all users and server performance is lost. Adding faster hardware and more memory is just a temporary stop-gap. The goal is to understand the design of individual queries, how they access the underlying database, and how they interact with each other.


    Next Page>>    








Home | Peformance Articles | Audit Articles | Business Intelligence Articles | Clustering Articles | Developer Articles | Reporting Services Articles | DBA Articles | ASP.NET / ADO.NET Articles | SQL Server Training Videos | DBA FAQ's | Developer Peformance FAQ's | DBA Peformance FAQ's | Developer FAQ's | Clustering FAQ's | Error Messages | Audit Tool Reviews | Backup Tool Reviews | Coding Tool Reviews | Compare Tool Reviews | Documentation Tool Reviews | Design Tool Reviews | Monitoring Tool Reviews | Log Tool Reviews | Reporting Tool Reviews | Clustering Tool Reviews | Security Tool Reviews | Change Management Tool Reviews | Remote Access Tool Reviews | Book Reviews | Security Tool Reviews | QDPMA Performance Tuning | ADO.NET / ASP.NET | Administration | Analysis/OLAP Services | Application Development | Configuration | Components | ETL | Hardware | High Availability | Hints | Index | Misc | Operating Systems | Performance Tuning | Replication | T-SQL | Views


              © 1999-2008 by T10 Media. All rights reserved