web-dev-qa-db-ja.com

アクティブなSQL Server接続をどのように確認できますか?

SQL Server 2008 Enterpriseを使用しています。アクティブなSQL Server接続と、どのIPアドレスから、どのデータベースに接続しているかなど、すべての接続に関する関連情報を確認したいのですが。

この問題を解決するための既存のコマンドはありますか?

252
George2

sp_who ストアドプロシージャを使用できます。

Microsoft SQL Serverデータベースエンジンのインスタンス内の現在のユーザー、セッション、およびプロセスに関する情報を提供します。情報は、アイドル状態ではないプロセス、特定のユーザーに属するプロセス、または特定のセッションに属するプロセスのみを返すようにフィルタリングできます。

308
Mehrdad Afshari
SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame
;

sys.sysprocesses のMicrosoftのマニュアルも参照してください。

299
Syed Umar Ahmed

sp_whoとは別に、より詳細な情報を提供する「文書化されていない」sp_who2システムストアドプロシージャを使用することもできます。sp_whoとsp_who2の違いを参照してください。

47
Sklivvz

ツールバーの "activity monitor"アイコンをクリックしてください。

Thorstenのコメントより

SQL Server Management Studioで、サーバーを右クリックし、コンテキストメニューから[Activity Monitor]を選択するか、キーボードショートカットを使用します。 Ctrl + Alt + A

38
Fernando Santos

以下は、データベースに接続されているすべてのセッションを見つけるためのスクリプトです。それらのセッションが入出力を行っているかどうかを確認することができ、それらを強制終了することもできます。

スクリプトは各セッションのステータスも表示します。

以下を見てください。

--==============================================================================
-- See who is connected to the database.
-- Analyse what each spid is doing, reads and writes.
-- If safe you can copy and paste the killcommand - last column.
-- Marcelo Miorelli
-- 18-july-2017 - London (UK)
-- Tested on SQL Server 2016.
--==============================================================================
USE master
go
SELECT
     sdes.session_id
    ,sdes.login_time
    ,sdes.last_request_start_time
    ,sdes.last_request_end_time
    ,sdes.is_user_process
    ,sdes.Host_name
    ,sdes.program_name
    ,sdes.login_name
    ,sdes.status

    ,sdec.num_reads
    ,sdec.num_writes
    ,sdec.last_read
    ,sdec.last_write
    ,sdes.reads
    ,sdes.logical_reads
    ,sdes.writes

    ,sdest.DatabaseName
    ,sdest.ObjName
    ,sdes.client_interface_name
    ,sdes.nt_domain
    ,sdes.nt_user_name
    ,sdec.client_net_address
    ,sdec.local_net_address
    ,sdest.Query
    ,KillCommand  = 'Kill '+ CAST(sdes.session_id  AS VARCHAR)
FROM sys.dm_exec_sessions AS sdes

INNER JOIN sys.dm_exec_connections AS sdec
        ON sdec.session_id = sdes.session_id

CROSS APPLY (

    SELECT DB_NAME(dbid) AS DatabaseName
        ,OBJECT_NAME(objectid) AS ObjName
        ,COALESCE((
            SELECT TEXT AS [processing-instruction(definition)]
            FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)
            FOR XML PATH('')
                ,TYPE
            ), '') AS Query

    FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)

) sdest
WHERE sdes.session_id <> @@SPID
  AND sdest.DatabaseName ='yourdatabasename'
--ORDER BY sdes.last_request_start_time DESC

--==============================================================================
19

あなたが結果についていくらかの質問をすることができるように私はこれを一緒に投げました

Declare @dbName varchar(150)
set @dbName = '[YOURDATABASENAME]'

--Total machine connections
--SELECT  COUNT(dbid) as TotalConnections FROM sys.sysprocesses WHERE dbid > 0

--Available connections
DECLARE @SPWHO1 TABLE (DBName VARCHAR(1000) NULL, NoOfAvailableConnections VARCHAR(1000) NULL, LoginName VARCHAR(1000) NULL)
INSERT INTO @SPWHO1 
    SELECT db_name(dbid), count(dbid), loginame FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid, loginame
SELECT * FROM @SPWHO1 WHERE DBName = @dbName

--Running connections
DECLARE @SPWHO2 TABLE (SPID VARCHAR(1000), [Status] VARCHAR(1000) NULL, [Login] VARCHAR(1000) NULL, HostName VARCHAR(1000) NULL, BlkBy VARCHAR(1000) NULL, DBName VARCHAR(1000) NULL, Command VARCHAR(1000) NULL, CPUTime VARCHAR(1000) NULL, DiskIO VARCHAR(1000) NULL, LastBatch VARCHAR(1000) NULL, ProgramName VARCHAR(1000) NULL, SPID2 VARCHAR(1000) NULL, Request VARCHAR(1000) NULL)
INSERT INTO @SPWHO2 
    EXEC sp_who2 'Active'
SELECT * FROM @SPWHO2 WHERE DBName = @dbName
12
Don Rolling

" kill "コマンドの使い方を説明しているMSの問い合わせは、接続情報を提供するのに非常に便利です。

SELECT conn.session_id, Host_name, program_name,
    nt_domain, login_name, connect_time, last_request_end_time 
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
   ON sess.session_id = conn.session_id;

HTH、

0
Zalakain