我的web应用程序在asp.net 2.0,c#2.0和sql server 208中如何在我的sql server 2008数据库中找到打开的连接数。有没有办法清除连接池。因为我的网站是托管的在共享主机上,他们提供了有限的连接。在我的编码中,我在使用后关闭了所有连接,但我仍然收到警告暂停数据库。
任何人都可以告诉我如何在数据库中找到数字打开连接以及如何清除连接池。
我在finally块中使用后使用了连接语句并关闭了所有连接。所以尽管有错误,它会关闭oped连接。
提前致谢。
答案 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。