SQLServerCentral Article

Detecting Performance Issues With Sysprocesses

,

Using Master..Sysprocess to Isolate Performance Issues - Part 1

It's 4:30 on Friday and your boss comes to you in

a panic.  The e-commerce system is down, and the database is to

blame.  You go through your usual what's-going-on checklist and all you can

tell is the CPU on the SQL Server is pegged at 100%.  You check Profiler,

but no high CPU commands seem to hitting the database.  Looks like it's

going to be a late Friday.

Checking the Sysprocesses table

Finding the solution to this weekend killing

scenario is often quite simple.  The sysprocesses table in the master

database holds information about each unique process, or SPID, running on the

SQL Server.  To view information about these processes, run the following

command in Query Analyzer:

select * from master..sysprocesses

The output will be a row for each

unique SPID on the server.  SPIDs 1 thru 50 are reserved for internal SQL

Server processes, while SPIDs 51 and above are external connections.

Finding high CPU activity

Since the issue appears to be a

CPU intensive process, you will be particularly interested in the CPU

column in the result set.  The value in this column is cumulative over the

period the process has been connected to the server, so a high value doesn't necessarily

indicate a problem.  However, combined with the status

column, you may be able to narrow down on the particular process that is causing

you to stay late on Friday.  If the sysprocesses

table holds many rows, narrowing down to processes that are currently active as

follows might be helpful:

select * from master..sysprocesses
where status = 'runnable'
order by CPU
desc

The status = 'runnable' clause

will return only processes that are currently running.  You can now look at

the top couple of rows that were returned.  Do any have values in the CPU

column that seem excessively high?  Generally, a value in the thousands

might indicate a problem.

Assigning blame

Now that we have isolated the

process that is causing the pegged CPU scenario we can look further into exactly

what this process is.  The following columns in the master..sysprocesses

table will help shed light on the culprit:

loginname

- The login used to connect to SQL for this process.  This can be a SQL

Server login, or a Windows domain account.

hostname

- The NetBios name of the computer where the process originated.

program_name

- The name of the application that opened the connection

Furthermore, the exact command

currently being run can usually be determined.  On SQL 7.0 or SQL 2000 sp2

or below servers, the following command will output the first 255 characters of

the command currently being run for a particular SPID:

DBCC INPUTBUFFER (spid)    -- replace spid with the actual numeric value

The above command will also work

on SQL 2000 sp3 and SQL 2005 servers (with SQL 2005 up to 4000 characters may be

returned).  These SQL editions have three additional columns in the master..sysprocesses

table:  sql_handle,

stmt_start, and

stmt_endThese

columns can be used to obtain additional

information on the command

being run as follows:

DECLARE@handle binary(20)
SELECT @handle = sql_handle FROM master..sysprocesses 
WHERE spid = SPID  -- replace with actual numeric value 
SELECT [text] FROM ::fn_get_sql(@handle)

Now that you know who is running what from where

and why it is pegging your CPU, you may choose to contact them and ask them to

stop their process, or if you are really ready to start your weekend, terminate

the process using the KILL command:

KILL SPID  -- replace with actual numeric value

Conclusion

The sysprocesses

table holds valuable information on the processes running on your server. 

There are several SQL management tools on the market today that make great use

in leveraging this information to generate all kinds of useful reports on your

databases - Periscope for SQL Server by Highwire Development and i/3 by Veritas

are two examples.

In Part 2 we will examine how to

use the sysprocess

table to create an automated job to monitor another common performance

bottleneck - blocking.  Until then, enjoy your Friday.

 

 

 

 

 

Rate

4.8 (5)

You rated this post out of 5. Change rating

Share

Share

Rate

4.8 (5)

You rated this post out of 5. Change rating