9

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

谁能告诉我如何在数据库上查找打开的连接数以及如何清除连接池。

我使用 using 语句进行连接,并在 finally 块中使用后关闭了所有连接。因此,尽管出现错误,它会关闭已打开的连接。

提前致谢。

4

3 回答 3

12

这显示了每个 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/监控数据库连接/

调用静态方法ReleaseObjectPoolOleDbConnection-见http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.releaseobjectpool.aspx

于 2012-08-09T05:03:11.143 回答
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

于 2012-08-09T05:51:36.313 回答
1

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

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

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

执行 sql 查询所涉及的所有各种对象IDisposable都应包装在一条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 中具有适当的管理员权限)来检查在 Sql Server 中打开了哪些 SPID。您也可以使用 perfmon。

于 2012-08-09T03:45:57.470 回答