Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you measure the number of open database connections

I am trying to determine if I have a database connection leak. So I need to see the number of open connections. I have some simple test code that creates a leak:

protected void Page_Load(object sender, EventArgs e)
{
  for(int i = 0; i < 100; i++)
  {
    SqlConnection sql = new SqlConnection(@"Data Source=.\SQLExpress;UID=sa;PWD=fjg^%kls;Initial Catalog=ABC");
    sql.Open();
  }

}

Note there is no .Close and this does infact crash after being run 3 times in quick succession.

In order to measure the leak I am running the Performance monitor and measuring SQLServer: General Statistics/User Connections:

alt text
(source: yart.com.au)

However, these seem to be zero when I run my code:

alt text
(source: yart.com.au)

What should I change to actually see the connections?

ANSWER

I have approved an answer below. Even though it doesn't use the performance tools, its good enough for my use. Bottom line is I wanted to see how many connections remain open after opening a web page and this did the trick.

like image 923
Petras Avatar asked Jun 21 '10 02:06

Petras


People also ask

How many SQL connections are open?

By default, SQL Server allows a maximum of 32767 concurrent connections which is the maximum number of users that can simultaneously log in to the SQL server instance.

How do I view open connections in SQL?

In SQL Server Management Studio, right click on Server, choose "Activity Monitor" from context menu -or- use keyboard shortcut Ctrl + Alt + A . Good option, but it requires more priviledges than DB_NAME(dbid) extraction from sys. sysprocesses.

How do I find the maximum number of connections in SQL Server?

By default, SQL Server allows a maximum of 32767 concurrent connections which is the maximum number of users that can simultaneously log in to the SQL server instance.


1 Answers

You can try running a query against the master db like this:

SELECT SPID,
       STATUS,
       PROGRAM_NAME,
       LOGINAME=RTRIM(LOGINAME),
       HOSTNAME,
       CMD
FROM  MASTER.DBO.SYSPROCESSES
WHERE DB_NAME(DBID) = 'TEST' AND DBID != 0 

See this link for more details.

like image 57
brendan Avatar answered Nov 15 '22 23:11

brendan