查找数据库上的打开连接数

时间:2012-08-09 03:05:38

标签: c# asp.net sql-server sql-server-2008 ado.net

我的web应用程序在asp.net 2.0,c#2.0和sql server 208中如何在我的sql server 2008数据库中找到打开的连接数。有没有办法清除连接池。因为我的网站是托管的在共享主机上,他们提供了有限的连接。在我的编码中,我在使用后关闭了所有连接,但我仍然收到警告暂停数据库。

任何人都可以告诉我如何在数据库中找到数字打开连接以及如何清除连接池。

我在finally块中使用后使用了连接语句并关闭了所有连接。所以尽管有错误,它会关闭oped连接。

提前致谢。

3 个答案:

答案 0 :(得分:11)

显示每个DB的连接数:

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NoOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame

这给出了总连接:

SELECT 
    COUNT(dbid) as TotalConnections
FROM
    sys.sysprocesses
WHERE 
    dbid > 0

从c#,你可以遵循:
http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx 另一个很好的参考可以在:      http://www.wduffy.co.uk/blog/monitoring-database-connections/

ReleaseObjectPool上调用静态方法OleDbConnection - 请参阅http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.releaseobjectpool.aspx

答案 1 :(得分:2)

获取当前活动连接的SQL查询

SELECT DB_NAME(dbid) as 'DbNAme', COUNT(dbid) as 'Connections' from master.dbo.sysprocesses with (nolock) WHERE dbid > 0 GROUP BY dbid

如果您想要特定于数据库的连接

,则可以定义dbid

答案 2 :(得分:1)

您可能想要了解连接池:http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

为每个不同的连接字符串创建单独的连接池。此外,如果您通过集成安全性进行连接,并且您的网站使用的是基本身份验证或Windows身份验证(而不是匿名身份验证),则将为该网站的每个用户创建一个单独的连接池。

要清除连接池,SqlConnection对象提供方法ClearPool()和ClearAllPool()`。但是,在关闭或处置之前,单个连接不会被关闭并从池中移除。

执行IDisposable的sql查询所涉及的所有各种对象都应该包含在using语句中,以保证正确处理。这些方面的东西:

IEnumerable<BusinessObject> list = new List<BusinessObject>() ;

using ( SqlConnection  connection = new SqlConnection( credentials ) )
using ( SqlCommand     command    = connection.CreateCommand() )
using ( SqlDataAdapter adapter    = new SqlDataAdapter( command ) )
using ( DataSet        results    = new DataSet() )
{

  command.CommandType = CommandType.StoredProcedure ;
  command.CommandText = @"someStoredProcedure" ;

  try
  {
    connection.Open() ;
    adapter.Fill( results ) ;
    connection.Close() ;

    list = TransformResults( results ) ;

  }
  catch
  {
    command.Cancel() ;
    throw
  }

}

return list ;

您可以通过执行存储过程sp_who来检查Sql Server中打开的SPID(必须在SQL Server中具有相应的管理权限)。你也可以使用perfmon。