查找数据库上的打开连接数
我的web应用程序是在asp.net 2.0,c#2.0和sql server 208中如何找到我的sql server 2008数据库上的打开连接数。有没有办法清除连接池。因为我的网站托管在共享主机上他们提供的连接有限。 在我的编码中,我在使用后关闭了所有连接,但我仍然收到暂停数据库的警告。
任何人都可以告诉我如何在数据库上找到数字打开连接以及如何清除连接池。
我使用using语句进行连接,并在finally块中使用后关闭所有连接。 所以尽管有错误,它会关闭oped连接。
提前致谢。
这显示了每个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/
在OleDbConnection
上调用静态方法ReleaseObjectPool
– 请参阅http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.releaseobjectpool.aspx
Sql查询获取当前活动连接
SELECT DB_NAME(dbid) as 'DbNAme', COUNT(dbid) as 'Connections' from master.dbo.sysprocesses with (nolock) WHERE dbid > 0 GROUP BY dbid
如果需要特定于数据库的连接,则可以定义dbid
您可能想要了解连接池: http : //msdn.microsoft.com/en-us/library/8xx3tyca.aspx
为每个不同的连接字符串创建单独的连接池。 此外,如果您通过集成安全性进行连接,并且您的网站使用的是基本身份validation或Windows身份validation(而不是匿名身份validation),则将为该网站的每个用户创建一个单独的连接池。
要清除连接池, SqlConnection
对象提供ClearPool()
和ClearAllPool()方法。 但是,在关闭或处置之前,不会关闭单个连接并将其从池中移除。
执行IDisposable
的sql查询所涉及的所有各种对象都应该包含在using
语句中,以保证正确处理。 这些方面的东西:
IEnumerable list = new List () ; 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。