sys.dm_exec_sessions (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric のSQL 分析エンドポイント Microsoft Fabric のウェアハウス
SQL Server 上の認証されたセッションごとに 1 行を返します。 sys.dm_exec_sessions
は、すべてのアクティブなユーザー接続と内部タスクに関する情報を示すサーバー スコープのビューです。 この情報には、クライアント バージョン、クライアント プログラム名、クライアントのログイン日時、ログイン ユーザー、現在のセッション設定などが含まれます。 最初に、sys.dm_exec_sessions
を使って、現在のシステムの負荷を確認し、目的のセッションを特定した後、他の動的管理ビューまたは動的管理関数を使って、そのセッションに関する詳細を把握します。
sys.dm_exec_connections
、sys.dm_exec_sessions
、sys.dm_exec_requests
動的管理ビューは、非推奨の sys.sysprocesses システム互換性ビューに対応します。
注意
Azure Synapse Analytics または Analytics Platform System (PDW) の専用 SQL プールからこれを呼び出す方法については、「sys.dm_pdw_nodes_exec_sessions」をご覧ください。 サーバーレス SQL プールまたは Microsoft Fabric の場合は、sys.dm_exec_sessions
を使います。
列名 | データ型 | 説明とバージョン固有の情報 |
---|---|---|
session_id | smallint | アクティブな各プライマリ接続に関連付けられたセッションを識別します。 NULL 値は許可されません。 |
login_time | datetime | セッションが確立された時刻。 NULL 値は許可されません。 この DMV のクエリが実行された時点で、ログインが完了していないセッションは、ログイン時刻が 1900-01-01 と表示されます。 |
host_name | nvarchar(128) | セッション固有のクライアント ワークステーションの名前。 内部セッションの場合、この値は NULL になります。 NULL 値が許可されます。 セキュリティに関する注意: クライアント アプリケーションによって提供されるワークステーション名で、不正確なデータが指定される可能性があります。 セキュリティ機能として HOST_NAME に依存しないでください。 |
program_name | nvarchar(128) | セッションを開始したクライアント プログラムの名前。 内部セッションの場合、この値は NULL になります。 NULL 値が許可されます。 |
host_process_id | int | セッションを開始したクライアント プログラムのプロセス ID。 内部セッションの場合、この値は NULL になります。 NULL 値が許可されます。 |
client_version | int | クライアントでサーバーへの接続に使用されるインターフェイスの TDS プロトコル バージョン。 内部セッションの場合、この値は NULL になります。 NULL 値が許可されます。 |
client_interface_name | nvarchar(32) | クライアントがサーバーと通信するために使うライブラリまたはドライバーの名前。 内部セッションの場合、この値は NULL になります。 NULL 値が許可されます。 |
security_id | varbinary(85) | ログインに関連付けられた、Microsoft Windows のセキュリティ ID。 NULL 値は許可されません。 |
login_name | nvarchar(128) | 現在セッションを実行している SQL Server ログイン名。 セッションを作成した元のログイン名については、 original_login_name を参照してください。 SQL Server の認証済みログイン名または Windows の認証済みドメイン ユーザー名を指定できます。 NULL 値は許可されません。 |
nt_domain | nvarchar(128) | 適用対象: SQL Server 2008 (10.0.x) 以降のバージョン セッションで Windows 認証または信頼された接続を使用している場合のクライアントの Windows ドメイン。 内部セッションとドメイン以外のユーザーの場合、この値は NULL です。 NULL 値が許可されます。 |
nt_user_name | nvarchar(128) | 適用対象: SQL Server 2008 (10.0.x) 以降のバージョン セッションで Windows 認証または信頼された接続を使用している場合のクライアントの Windows ユーザー名。 内部セッションとドメイン以外のユーザーの場合、この値は NULL です。 NULL 値が許可されます。 |
status | nvarchar(30) | セッションの状態。 指定できる値 Running - 現在 1 つ以上の要求を実行中です。 Sleeping - 現在要求を実行していません。 Dormant - セッションは、接続プールのためにリセットされており、現在はログイン前の状態です。 Preconnect - セッションはリソース ガバナー分類子内にあります。 NULL 値は許可されません。 |
context_info | varbinary (128) | セッションの CONTEXT_INFO 値。 コンテキスト情報は、ユーザーが SET CONTEXT_INFO ステートメントを使って設定します。 NULL 値が許可されます。 |
cpu_time | int | このセッションで使われた CPU 時間 (ミリ秒単位)。 NULL 値は許可されません。 |
memory_usage | int | セッションで使用されたメモリの 8 KB ページの数。 NULL 値は許可されません。 |
total_scheduled_time | int | セッション (セッション内の要求) でスケジュールされていた実行の合計時間 (ミリ秒単位)。 NULL 値は許可されません。 |
total_elapsed_time | int | セッションが確立されてから経過した時間 (ミリ秒単位)。 NULL 値は許可されません。 |
endpoint_id | int | セッションに関連付けられたエンドポイント ID。 NULL 値は許可されません。 |
last_request_start_time | datetime | セッションで要求が最後に開始された時刻。 現在実行されている要求も対象となります。 NULL 値は許可されません。 |
last_request_end_time | datetime | セッションで要求が最後に完了した時刻。 NULL 値が許可されます。 |
読み取り | bigint | セッション中に、セッションの要求によって実行された読み取りの数。 NULL 値は許可されません。 |
書き込み | bigint | セッション中に、セッションの要求によって実行された書き込みの数。 NULL 値は許可されません。 |
logical_reads | bigint | このセッションの間に、このセッションの要求によって実行された論理読み取りの数。 NULL 値は許可されません。 |
is_user_process | bit | セッションがシステム セッションの場合は 0。 それ以外の場合は 1 です。 NULL 値は許可されません。 |
text_size | int | セッションの TEXTSIZE 設定。 NULL 値は許可されません。 |
language | nvarchar(128) | セッションの LANGUAGE 設定。 NULL 値が許可されます。 |
date_format | nvarchar(3) | セッションの DATEFORMAT 設定。 NULL 値が許可されます。 |
date_first | smallint | セッションの DATEFIRST 設定。 NULL 値は許可されません。 |
quoted_identifier | bit | セッションの QUOTED_IDENTIFIER 設定。 NULL 値は許可されません。 |
arithabort | bit | セッションの ARITHABORT 設定。 NULL 値は許可されません。 |
ansi_null_dflt_on | bit | セッションの ANSI_NULL_DFLT_ON 設定。 NULL 値は許可されません。 |
ansi_defaults | bit | セッションの ANSI_DEFAULTS 設定。 NULL 値は許可されません。 |
ansi_warnings | bit | セッションの ANSI_WARNINGS 設定。 NULL 値は許可されません。 |
ansi_padding | bit | セッションの ANSI_PADDING 設定。 NULL 値は許可されません。 |
ansi_nulls | bit | セッションの ANSI_NULLS 設定。 NULL 値は許可されません。 |
concat_null_yields_null | bit | セッションの CONCAT_NULL_YIELDS_NULL 設定。 NULL 値は許可されません。 |
transaction_isolation_level | smallint | セッションのトランザクション分離レベル。 0 = Unspecified 1 = ReadUncommitted 2 = ReadCommitted 3 = RepeatableRead 4 = Serializable 5 = Snapshot NULL 値は許可されません。 |
lock_timeout | int | セッションの LOCK_TIMEOUT 設定。 値の単位はミリ秒です。 NULL 値は許可されません。 |
deadlock_priority | int | セッションの DEADLOCK_PRIORITY 設定。 NULL 値は許可されません。 |
row_count | bigint | セッションでこの時点までに返された行の数。 NULL 値は許可されません。 |
prev_error | int | セッションで最後に返されたエラーの ID。 NULL 値は許可されません。 |
original_security_id | varbinary(85) | original_login_name に関連付けられている Microsoft Windows セキュリティ ID。 NULL 値は許可されません。 |
original_login_name | nvarchar(128) | クライアントがこのセッションを作成するために使った SQL Server ログイン名。 SQL Server の認証済みログイン名、Windows の認証済みドメイン ユーザー名、または包含データベース ユーザーを指定できます。 セッションでは、最初の接続後に、暗黙的または明示的に多くのコンテキスト切り替えが行われている可能性があります。 たとえば、EXECUTE AS が使われる場合などです。 NULL 値は許可されません。 |
last_successful_logon | datetime | 適用対象: SQL Server 2008 (10.0.x) 以降のバージョン 現在のセッションが開始する前に、original_login_name のログオンが最後に成功した時間。 |
last_unsuccessful_logon | datetime | 適用対象: SQL Server 2008 (10.0.x) 以降のバージョン 現在のセッションが開始する前に、original_login_name のログオン試行が最後に失敗した時間。 |
unsuccessful_logons | bigint | 適用対象: SQL Server 2008 (10.0.x) 以降のバージョンlast_successful_logon とlogin_time の間のoriginal_login_name のログオン試行が失敗した回数。 |
group_id | int | このセッションが属しているワークロード グループの ID。 NULL 値は許可されません。 |
database_id | smallint | 適用対象: SQL Server 2012 (11.x) 以降のバージョン 各セッションの現在のデータベースの ID。 Azure SQL Database では、値は 1 つのデータベースまたは Elastic Pool 内で一意ですが、論理サーバー内では一意ではありません。 |
authenticating_database_id | int | 適用対象: SQL Server 2012 (11.x) 以降のバージョン プリンシパルを認証するデータベースの ID。 ログインの場合、値は 0 になります。 包含データベース ユーザーの場合、値は包含データベースのデータベース ID になります。 |
open_transaction_count | int | 適用対象: SQL Server 2012 (11.x) 以降のバージョン セッションごとに開いているトランザクションの数。 |
pdw_node_id | int | 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW) このディストリビューションがオンになっているノードの識別子。 |
page_server_reads | bigint | 適用対象: Azure SQL Database Hyperscale このセッションの間に、このセッションの要求によって実行されたページ サーバー読み取りの数。 NULL 値は許可されません。 |
アクセス許可
すべてのユーザーが自分のセッション情報を確認できます。
SQL Server: サーバー上のすべてのセッションを表示するには、SQL Server に対する VIEW SERVER STATE
アクセス許可が必要です。
SQL Database: 現在のデータベースに対するすべての接続を表示するには、VIEW DATABASE STATE
が必要です。 master
データベースで VIEW DATABASE STATE
を付与することはできません。
SQL Server 2022 以降のアクセス許可
サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。
解説
common criteria compliance enabled サーバー構成オプションを有効にすると、次の列にログオンの統計情報が表示されます。
last_successful_logon
last_unsuccessful_logon
unsuccessful_logons
このオプションが有効になっていない場合、これらの列は NULL 値を返します。 このサーバー構成オプションの設定方法について詳しくは、Common Criteria Compliance Enabled サーバー構成オプションに関する記事をご覧ください。
Azure SQL Database の管理者接続には、認証されたセッションごとに 1 行が表示されます。 結果セットに表示される "sa" セッションは、セッションのユーザー クォータに影響しません。 管理者以外の接続では、そのデータベース ユーザー セッションに関連する情報のみが表示されます。
記録方法の違いにより、 open_transaction_count
が sys.dm_tran_session_transactions
.open_transaction_count
と一致しない可能性があります。
リレーションシップのカーディナリティ
ソース | 終了 | オン/適用 | リレーションシップ |
---|---|---|---|
sys.dm_exec_sessions |
sys.dm_exec_requests | session_id | 一対ゼロまたは一対多 |
sys.dm_exec_sessions |
sys.dm_exec_connections | session_id | 一対ゼロまたは一対多 |
sys.dm_exec_sessions |
sys.dm_tran_session_transactions | session_id | 一対ゼロまたは一対多 |
sys.dm_exec_sessions |
sys.dm_exec_cursors (session_id | 0) | session_id CROSS APPLY OUTER APPLY |
一対ゼロまたは一対多 |
sys.dm_exec_sessions |
sys.dm_db_session_space_usage | session_id | 一対一 |
例
A. サーバーに接続されているユーザーを検索する
次の例では、サーバーに接続されているユーザーを検索して、各ユーザーのセッション数を返します。
SELECT login_name,
COUNT(session_id) AS session_count
FROM sys.dm_exec_sessions
GROUP BY login_name;
B. 実行時間の長いカーソルを検索する
次の例では、特定の期間よりも長く開いているカーソル、カーソルの作成者、およびカーソルが配置されているセッションを検索します。
USE master;
GO
SELECT creation_time,
cursor_id,
name,
c.session_id,
login_name
FROM sys.dm_exec_cursors(0) AS c
INNER JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE DATEDIFF(mi, c.creation_time, GETDATE()) > 5;
GO
C. トランザクションが開いているアイドル状態のセッションを検索する
次の例では、トランザクションを開いたままアイドル状態になっているセッションを検索します。 アイドル状態のセッションとは、現在要求が実行されていないセッションです。
SELECT s.*
FROM sys.dm_exec_sessions AS s
WHERE EXISTS (
SELECT *
FROM sys.dm_tran_session_transactions AS t
WHERE t.session_id = s.session_id
)
AND NOT EXISTS (
SELECT *
FROM sys.dm_exec_requests AS r
WHERE r.session_id = s.session_id
);
D. クエリ自体の接続に関する情報を検索する
次の例では、クエリ自体の接続に関する情報を収集します。
SELECT c.session_id,
c.net_transport,
c.encrypt_option,
c.auth_scheme,
s.host_name,
s.program_name,
s.client_interface_name,
s.login_name,
s.nt_domain,
s.nt_user_name,
s.original_login_name,
c.connect_time,
s.login_time
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE c.session_id = @@SPID;
次のステップ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示