perfmon.msc 或「系統管理工具 → 效能」。MSSQL$InstanceName:General Statistics)。優點:視覺化、可記錄長時間趨勢。
缺點:需登入伺服器主控台或具備遠端監控權限。
-- SQL Server 2000
SELECT COUNT(*) AS CurrentConnections
FROM master.dbo.sysprocesses
WHERE dbid > 0; -- 排除系統背景程序
-- SQL Server 2005+ 推薦使用 DMV
SELECT
DB_NAME(database_id) AS DatabaseName,
COUNT(*) AS ConnectionCount,
login_name,
host_name,
program_name
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
GROUP BY database_id, login_name, host_name, program_name
ORDER BY ConnectionCount DESC;
進階:找出連線最多的前 10 個用戶端 IP
SELECT client_net_address, COUNT(*) AS Cnt
FROM sys.dm_exec_connections
GROUP BY client_net_address
ORDER BY Cnt DESC;
| 錯誤 | 可能原因 | 排查方向 |
|---|---|---|
| Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. | 連線池耗盡 | 檢查應用程式是否正確 Close()/Dispose();調大 Max Pool Size |
| Login failed for user ''. The user is not associated with a trusted SQL Server connection. | 認證失敗 | 確認登入名稱、密碼、驗證模式(混合/Windows) |
| Maximum number of concurrent connections exceeded. | 達到授權或設定上限 | 檢查 sp_configure 'user connections' 或 Core CAL 授權 |
DECLARE @DBName sysname = 'YourDatabase';
SELECT
ses.session_id,
ses.login_time,
ses.login_name,
ses.host_name,
ses.program_name,
ses.status,
req.command,
req.cpu_time,
req.logical_reads,
req.blocking_session_id
FROM sys.dm_exec_sessions ses
LEFT JOIN sys.dm_exec_requests req ON ses.session_id = req.session_id
WHERE ses.is_user_process = 1
AND DB_NAME(req.database_id) = @DBName;