如何确定ms sql server 2005中的打开/活动连接总数

88 database sql-server connection sql-server-2005

我的PHP/MS Sql Server 2005/win 2003应用程序偶尔变得非常反应迟钝,内存/ CPU使用率不会出现高峰.如果我尝试从sql management studio打开任何新连接,那么它只是挂在打开的连接对话框中.如何确定ms sql server 2005的活动连接总数

Mit*_*eat 250

这显示了每个DB的连接数:

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame
Run Code Online (Sandbox Code Playgroud)

这给出了总数:

SELECT 
    COUNT(dbid) as TotalConnections
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
Run Code Online (Sandbox Code Playgroud)

如果您需要更多详细信息,请运行:

sp_who2 'Active'
Run Code Online (Sandbox Code Playgroud)

注意:使用的SQL Server帐户需要'sysadmin'角色(否则它只显示一行,计数为1)

  • 这既不应该被接受,也不应该是最高投票的答案,因为这是完全错误的.如果您以"sa"身份登录,则只能依赖返回的号码.如果您以非sa用户身份登录,您将看到1并且不能代表实际连接. (7认同)
  • @ajeh:隐含的是你有足够的权限来执行任务.你的评论是多余的. (3认同)
  • 太棒了,非常感谢。对于像我这样的新手,启动 SQL Server Management Studio,右键单击数据库,选择“新建查询”,将其粘贴进去,然后单击“!开始”按钮。 (2认同)
  • @ IEBasara:这是隐含的.为什么您希望非管理员能够查看此类信息? (2认同)

Mit*_*eat 7

正如@jwalkerjr所提到的,你应该在代码中处理连接(如果启用了连接池,它们只会返回到连接池).规定的方法是使用' using'声明:

// Execute stored proc to read data from repository
using (SqlConnection conn = new SqlConnection(this.connectionString))
{
    using (SqlCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "LoadFromRepository";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@ID", fileID);

        conn.Open();
        using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
        {
            if (rdr.Read())
            {
                filename = SaveToFileSystem(rdr, folderfilepath);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我知道这是旧的,但认为更新是个好主意。如果需要准确的计数,则可能还应该过滤列 ECID。具有并行线程的 SPID 可以在 sysprocesses 中多次显示,并且过滤 ECID=0 将返回每个 SPID 的主线程。

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses with (nolock)
WHERE 
    dbid > 0
    and ecid=0
GROUP BY 
    dbid, loginame
Run Code Online (Sandbox Code Playgroud)


rea*_*gos 5

使用它来获得每个连接池的准确计数(假设每个用户/主机进程使用相同的连接字符串)

SELECT 
DB_NAME(dbid) as DBName, 
COUNT(dbid) as NumberOfConnections,
loginame as LoginName, hostname, hostprocess
FROM
sys.sysprocesses with (nolock)
WHERE 
dbid > 0
GROUP BY 
dbid, loginame, hostname, hostprocess
Run Code Online (Sandbox Code Playgroud)