查看sql server數據庫連接情況


1.通過系統的“性能”來查看:
開始->管理工具->性能(或者是運行里面輸入 mmc)然后通過
添加計數器添加 SQL 的常用統計(MSSQL General Statistics) 然后在下面列出的項目里面選擇 用戶連接(User Connection) 就可以時時查詢到sql server數據庫連接數了。

2.通過系統表來查詢:

查詢數據庫當前連接數

SELECT * FROM 
[Master].[dbo].[SYSPROCESSES] WHERE [DBID] 
IN 
(
  SELECT 
   [DBID]
  FROM 
   [Master].[dbo].[SYSDATABASES] 
  WHERE 
   NAME='你的數據庫名稱'
)

 

 

databaseName 是需要查看的數據庫,然后查詢出來的行數,就是當前的sql server數據庫連接數。不過里面還有一些別的狀態可以做參考用。

或者使用以下查詢語句:

select * from sysprocesses where dbid in (select dbid from sysdatabases where name='MyDatabase')

 

由上面的語句可以看出系統表獲取一些連接和活動信息,主要介紹下面的兩個系統表:

(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


個人認為不對,看看.sysprocesseslogin_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,那么返回的就是所有的sql server數據庫連接。

 

4.通過SQL企業管理器查看:

在企業管理器里----management---current   activity-----process   info

 

這里有幾個與之相關的概念.

SQL Server提供了一些函數返回連接值(這里可不是當前連接數喲!),個人覺得,很容易產生誤解.

系統變量

@@CONNECTIONS 返回自上次啟動 Microsoft? SQL Server?  以來連接或試圖連接的次數。

@@MAX_CONNECTIONS 返回 Microsoft? SQL Server?  上允許的同時用戶連接的最大數。返回的數不必為當前配置的數值。

 

系統存儲過程

SP_WHO

提供關於當前 Microsoft? SQL Server?  用戶和進程的信息。可以篩選返回的信息,以便只返回那些不是空閑的進程。

列出所有活動的用戶:SP_WHO ‘active’

列出某個特定用戶的信息:SP_WHO ‘sa’

 

查詢最大連接數

SELECT @@MAX_CONNECTIONS

 

查詢每個數據的連接數

SELECT name ,count(*) FROM (
SELECT b.name,a.* FROM [Master].[dbo].[SYSPROCESSES] a 
INNER JOIN [Master].[dbo].[SYSDATABASES] b 
ON a.dbid=b.dbid
)t 
GROUP BY t.name

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM