Take the 2-minute tour ×
Database Administrators Stack Exchange is a question and answer site for database professionals who wish to improve their database skills and learn from others in the community. It's 100% free, no registration required.

I am a student from Fontys University in Eindhoven, and I am currently carrying out a series of interviews to help with the development of a SQL Server tool and I would like to get feedback from the experts in the field.

One of my questions is:

What are the top 3 performance issues that you encounter with your SQL Server Instances and how do you identify those problems?

Particularly I am interested in the scripts and the tools used to measure this.

share|improve this question
add comment

10 Answers

Off the top of my head - top 3 query problems:

  • Implicit conversions
  • Bad indexing strategies (too many or not enough or the wrong kind)
  • Using SELECT * instead of naming just the fields you need

There's a lot more around server-level config problems, database schema problems, hardware problems, etc. I wrote a script to quickly analyze servers looking for these kinds of problems:

http://www.brentozar.com/sql/blitz-minute-sql-server-takeovers/

share|improve this answer
add comment
  • Poor design/queries/indexing
  • Not allowed to buy correct hardware
  • Braindead ORMs (a.k.a "SQL is dead")
share|improve this answer
add comment

Not the top 3, but thought I would mention things not mentioned yet:

  1. SQL put on virtual machines with no details/transparency provided to the DBA. The host server will dynamically change the guest machines settings causing a drop in performance, and leaving the DBA without a clue. Features like hypertreading, network teaming, and memory ballooning makes the performance counters a moving target to monitor. Tools: sysmon/perfmon, DMVs, maintaining a history of performance counters in tables.
  2. Similarly, no transparency/verifiability on the SAN settings provided to the DBA. I have had LUNs with different read/write cache preferences set but told that they were all the same. Tools: IO DMVs, SQLIO.
  3. Bad DB architecture: like sizing and placement of the data and log files, and tempdb. Improper use of parallelism. Creating multiple filegroups on the same physical disks. Tools: experience.

Another tool that I am checking out now is Project Lucy. Seems neat.

share|improve this answer
2  
+1 for mentioning virtual machines... –  jrara Aug 11 '11 at 18:33
add comment
  • lacking proper indexes
  • use of with nolock in productioncode by someone to try to solve performance issues. Especially bad if the code modifies data in tables
  • application selecting more data than needed at more times than is necesary. Ex having a binary returned everytime even if you just want the textdata of same table.
share|improve this answer
2  
+1 for the nolock mention. Every developer I know think it is a good idea to use it because "it does not lock the table in readings" –  tucaz Aug 16 '11 at 23:00
    
Don't you just hate it when one customer of yours bought THAT huge system for multimoney and first time you look at it they use with nolock everywhere? And then ... :-/ –  Martin Sjöberg Aug 17 '11 at 23:08
add comment

Queries that scale badly (get all orders for X years for all customers etc including all orderlines including summed data and other average data badly calculated)

Just querying everything at once.

Tables that contain 'descript' varchar/text fields that have to be searched through every query.

share|improve this answer
add comment
  • Poor database and application design
  • poor usage of platform advantages (developers wanted to have platform-intepended database-access code. no SPs, no functions etc)
  • bad indexing, of course.
share|improve this answer
add comment
  • ad-hoc queries on prod data - yep, developers do believe it's necessary and some might even have access :-)
  • bad design of app that uses the database - eg: too much data added and never removed even if it's not necessary anymore (which leads to performance problems because backups grow big, maintenance tasks take longer..etc)
  • all database files on the same raid or worse, on the same drive (eg: system dbs, tempdb, user dbs all together on the same drive/raid)
share|improve this answer
add comment
  • Improper maintenance, i.e. no index reorgs, stats, no log backups
  • Missing indexes
  • Poorly written queries
share|improve this answer
add comment
  • Poor database design
  • Poor Indexing Strategy (including too many indexes, missing indexes, and lack of index maintenance)
  • Poor hardware architectural decisions
share|improve this answer
add comment

Indexing is critical to performance, but I've found most DBAs know that, and so it tends to be one of the first things that gets fixed through query optimization. The areas that often aren't well-addressed:

  1. Too many DB round-trips. Chattiness is one of the main performance problems I see.
  2. Getting the right transaction boundaries. Transacting every INSERT/UPDATE/DELETE can be a big performance killer.
  3. Failure to optimize the hardware side; particularly, putting the DB log on a different volume from DB data.

If I could add a fourth item to the list, it would be excessive and inappropriate use of triggers and/or cursors. Doesn't seem to happen too much these days, but when it does, it's painful from a performance perspective.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.