(原)获取SQL Server当前数据库连接问题的再论

获取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();

                }

            }

        }

    }

}

 

其中要感谢我的同时的帮助。如果有什么不对的地方,请大家“即时”纠正。

 

(原)获取SQL Server当前数据库连接问题的再论,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。