(原)获取SQL Server当前数据库连接问题的再论
获取SQL Server当前数据库连接问题的再论
(博客转载请注明原文地址和作者)
首先这个问题源自于以下这篇帖子。
这位博主将问题考虑的很全面了。大家提供的大都是稳定的,在连接池中的连接数而不是即时的用户的尝试连接数目。
关于稳定连接数目:
大多数回答都具有参考意义。但是在实际的测试中,我屏蔽了Background连接后仍然发现有2到3的不稳定差值。寻找了半天终于将测试数据和性能监视器中的数据对上了,完全不差已经用于公司服务器上了。
这条获取稳定连接数的语句,它长这样:
select COUNT(spid)
from master.dbo.sysprocesses
where
net_library=‘TCP/IP‘ and (loginame in (‘sa‘,‘NT AUTHORITY\SYSTEM‘,"...","..."));
关于即时的连接数目:
但是监视即时的连接sql的数目却依然没有得到解决。如果有人知道,请告知大家。
这里我提供一个方法,但是不是sql语句,是C#的,方便所有想解决这个问题的Ren:
最关键的一句是,获取性能计数器中的该项:
PerformanceCounter pCunter = new PerformanceCounter("SQLServer:General Statistics", "Connection Reset/sec");
它来自性能监视器的这里:
所有我的控制台代码如下:
using System;
using System.Diagnostics;
using System.Threading;
using System.Data;
using System.Data.SqlClient;
namespace TestSQLConnectionCounter
{
class Program
{
static void Main(string[] args)
{
PerformanceCounter pCunter = new PerformanceCounter("SQLServer:General Statistics", "Connection Reset/sec");
Thread th = new Thread(o => {//获取sql即时连接数数据的线程
while (true)
{
Console.WriteLine(pCunter.NextValue().ToString());
Thread.Sleep(1000);
}
});
//查数据库线程
Thread thSQL = new Thread(o =>
{
while (true)
{
Slct("Data Source=.;Initial Catalog=DBName;Integrated Security=True", "SQLString");
Thread.Sleep(10);
}
});
th.Start();
thSQL.Start();
Console.ReadLine();
}
/// <summary>
/// 查数据库
/// </summary>
/// <param name="conStr"></param>
/// <param name="sql"></param>
static void Slct(string conStr,string sql)
{
using (SqlConnection conn = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql,conn))
{
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
}
}
其中要感谢我的同时的帮助。如果有什么不对的地方,请大家“即时”纠正。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。