如何查询sql2005连接数
2009-05-05 12:02
204 查看
经常发生 “数据库连接过多的错误” 这样的错误,但是却又不清楚当前的连接数为多少,大致的总结了几种方法。
1.通过系统的“性能”来查看:
开始->管理工具->性能(或者是运行里面输入 mmc)然后通过
[attach]52716[/attach]
添加计数器添加 SQL 的常用统计 然后在下面列出的项目里面选择用户连接就可以时时查询到数据库的连接数了。
不过此方法的话需要有访问那台计算机的权限,就是要通过windows账户登陆进去才可以添加此计数器。
2.通过系统表来查询:
databaseName 是需要查看的数据库,然后查询出来的行数,就是当前的连接数。不过里面还有一些别的状态可以做参考用。
由上面的语句可以看出系统表获取一些连接和活动信息,主要介绍下面的两个系统表:
(1)sprocesses
sysprocesses 表中保存关于运行在 Microsoft® SQL Server™ 上的进程的信息。这些进程可以是客户端进程或系统进程。sysprocesses 只存储在 master 数据库中。
(2)Sysperfinfo
包括一个 Microsoft® SQL Server™ 表示法的内部性能计数器,可通过 Windows NT 性能监视器显示.
有人提议说为了获取SQL Server的当前连接数:使用如下SQL:
SELECT COUNT(*) AS CONNECTIONS FROM master..sysprocesses
个人认为这样不对,看看.sysprocesses的login_time列就可看出.
另外一个方面是进程不能和连接相提并论,他们是一对一的关系吗,也就是说一个进程就是一个连接?一个连接应该有多个进程的,所以连接和进程之间的关系应该是1:n的.
因为sysprocesses列出的进程包含了系统进程和用户进程,为了得到用户连接,可以使用如下SQL:
SELECT cntr_value AS User_Connections FROM master..sysperfinfo as p
WHERE p.object_name = 'SQLServer:General Statistics' And p.counter_name = 'User Connections'
个人还是认为不对,因为它是一个计数器,可能会累加的.
还有一种方案是利用如下SQL:
select connectnum=count(distinct net_address)-1 from master..sysprocesses
理由是net_address是访问者机器的网卡值,这个总该是唯一的吧.但是看起来得到的是所有时间内的连接数.
希望大家可以给出自己的解决方案.这个问题解决了,相信会有很大的用途.
3.通过系统过程来查询:
SP_WHO 'loginName'
loginName 是当然登陆Sql的用户名,一般程序里面都会使用一个username来登陆SQL这样通过这个用户名就能查看到此用户名登陆之后占用的连接了。
如果不写loginName,那么返回的就是所有的连接。
sp_who提供icrosoft® SQL Server™ 用户和进程的信息。可以筛选返回的信息,以便只返回那些不是空闲的进程。
列出所有活动的用户:SP_WHO ‘active’
列出某个特定用户的信息:SP_WHO ‘sa’
4、系统变量
@@CONNECTIONS 返回自上次启动 Microsoft® SQL Server™ 以来连接或试图连接的次数。
@@MAX_CONNECTIONS 返回 Microsoft® SQL Server™ 上允许的同时用户连接的最大数。返回的数不必为当前配置的数值
1.通过系统的“性能”来查看:
开始->管理工具->性能(或者是运行里面输入 mmc)然后通过
[attach]52716[/attach]
添加计数器添加 SQL 的常用统计 然后在下面列出的项目里面选择用户连接就可以时时查询到数据库的连接数了。
不过此方法的话需要有访问那台计算机的权限,就是要通过windows账户登陆进去才可以添加此计数器。
2.通过系统表来查询:
SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT [DBID] FROM [Master].[dbo].[SYSDATABASES] WHERE NAME='databaseName' )
databaseName 是需要查看的数据库,然后查询出来的行数,就是当前的连接数。不过里面还有一些别的状态可以做参考用。
由上面的语句可以看出系统表获取一些连接和活动信息,主要介绍下面的两个系统表:
(1)sprocesses
sysprocesses 表中保存关于运行在 Microsoft® SQL Server™ 上的进程的信息。这些进程可以是客户端进程或系统进程。sysprocesses 只存储在 master 数据库中。
(2)Sysperfinfo
包括一个 Microsoft® SQL Server™ 表示法的内部性能计数器,可通过 Windows NT 性能监视器显示.
有人提议说为了获取SQL Server的当前连接数:使用如下SQL:
SELECT COUNT(*) AS CONNECTIONS FROM master..sysprocesses
个人认为这样不对,看看.sysprocesses的login_time列就可看出.
另外一个方面是进程不能和连接相提并论,他们是一对一的关系吗,也就是说一个进程就是一个连接?一个连接应该有多个进程的,所以连接和进程之间的关系应该是1:n的.
因为sysprocesses列出的进程包含了系统进程和用户进程,为了得到用户连接,可以使用如下SQL:
SELECT cntr_value AS User_Connections FROM master..sysperfinfo as p
WHERE p.object_name = 'SQLServer:General Statistics' And p.counter_name = 'User Connections'
个人还是认为不对,因为它是一个计数器,可能会累加的.
还有一种方案是利用如下SQL:
select connectnum=count(distinct net_address)-1 from master..sysprocesses
理由是net_address是访问者机器的网卡值,这个总该是唯一的吧.但是看起来得到的是所有时间内的连接数.
希望大家可以给出自己的解决方案.这个问题解决了,相信会有很大的用途.
3.通过系统过程来查询:
SP_WHO 'loginName'
loginName 是当然登陆Sql的用户名,一般程序里面都会使用一个username来登陆SQL这样通过这个用户名就能查看到此用户名登陆之后占用的连接了。
如果不写loginName,那么返回的就是所有的连接。
sp_who提供icrosoft® SQL Server™ 用户和进程的信息。可以筛选返回的信息,以便只返回那些不是空闲的进程。
列出所有活动的用户:SP_WHO ‘active’
列出某个特定用户的信息:SP_WHO ‘sa’
4、系统变量
@@CONNECTIONS 返回自上次启动 Microsoft® SQL Server™ 以来连接或试图连接的次数。
@@MAX_CONNECTIONS 返回 Microsoft® SQL Server™ 上允许的同时用户连接的最大数。返回的数不必为当前配置的数值
相关文章推荐
- 如何查询连接到SQL服务器的客户端的MAC地址
- 如何用eclipse将数据库oracle数据相连接,实现查询数据库中的信息以及更改添加表中内容
- C# 连接sql2005 且 查询
- 如何让in/exists 子查询(半连接)作为驱动表?
- [MS SQL]如何连接两个查询结果?
- 如何让in/exists 子查询(半连接)作为驱动表?
- Workerman 如何连接到mysql数据库查询数据
- 如何让in/exists 子查询(半连接)作为驱动表?
- sqlserver 连接查询的问题,a表无重复记录,与b表中的记录为1对N关系,如何在查得a表信息时统计b表记录数
- 如何在当前连接的数据库建立查询语句或编辑数据库脚本
- esbuilder中连接sql2005出现了问题如何解决
- 如何读取配置文件并连接后台数据库,且对数据库进行操作实例(查询或修改等)
- 如何查询SQL2005的连接数
- hibernate使用sum聚集函数,时间段为查询条件连接SQL2005
- 子查询,连接查询,在SQL2008R2中性能如何?
- mysql如何根据select结果进行二次连接查询
- oracle 如何查询当前连接的用户名
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- SQL Server如何查询当前服务器有多少连接请求
- 如何查询SQL2005的连接数