SQL Server 2008 Enterpriseを使用しています。アクティブなSQL Server接続と、どのIPアドレスから、どのデータベースに接続しているかなど、すべての接続の関連情報を表示したいのですが。
この問題を解決する既存のコマンドはありますか?
SQL Server 2008 Enterpriseを使用しています。アクティブなSQL Server接続と、どのIPアドレスから、どのデータベースに接続しているかなど、すべての接続の関連情報を表示したいのですが。
この問題を解決する既存のコマンドはありますか?
回答:
sp_who
ストアドプロシージャを使用できます。
Microsoft SQL Serverデータベースエンジンのインスタンスの現在のユーザー、セッション、およびプロセスに関する情報を提供します。情報をフィルタリングして、アイドル状態ではないプロセス、特定のユーザーに属するプロセス、または特定のセッションに属するプロセスのみを返すことができます。
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のドキュメントも参照してください。
hostname
してSELECT
、GROUP BY
接続されているクライアントを確認することをお勧めします。また、私はMsftのタイプミスに気づきましたloginame
-それは、列名が8文字に制限されたときのアーティファクトですか?笑
ORDER BY 1, 2 DESC, 3
とは別に、より詳細な情報を提供するsp_who
「文書化されていない」sp_who2
システムストアドプロシージャを使用することもできます。sp_whoとsp_who2の違いを参照してください。
ツールバーの「アクティビティモニター」アイコンをクリックします...
トールステンのコメントから:
SQL Server Management Studioで、サーバーを右クリックし、コンテキストメニューから[アクティビティモニター]を選択します。または、キーボードショートカットCtrl+ Alt+を使用しますA。
以下は、データベースに接続されているすべてのセッションを見つけるためのスクリプトです。これらのセッションがI / Oを実行しているかどうかを確認でき、それらを強制終了するオプションがあります。
スクリプトには、各セッションのステータスも表示されます。
以下をご覧ください。
--==============================================================================
-- 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
--==============================================================================
結果をいくつかクエリできるように、これを一緒に投げました
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