sys.dm_exec_sessions (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

SQL Server 上の認証されたセッションごとに 1 行を返します。 sys.dm_exec_sessions は、すべてのアクティブなユーザー接続と内部タスクに関する情報を示すサーバー スコープのビューです。 この情報には、クライアント バージョン、クライアント プログラム名、クライアントのログイン日時、ログイン ユーザー、現在のセッション設定などが含まれます。 最初に、sys.dm_exec_sessions を使って、現在のシステムの負荷を確認し、目的のセッションを特定した後、他の動的管理ビューまたは動的管理関数を使って、そのセッションに関する詳細を把握します。

sys.dm_exec_connectionssys.dm_exec_sessionssys.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) 以降のバージョン

と . の間のログオン試行がoriginal_login_name失敗したlast_successful_logonlogin_time回数。
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_transactionsopen_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;

次のステップ