次の方法で共有


sys.dm_exec_sessions (Transact-SQL)

Applies to: 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_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) ログインに関連付けられている Windows セキュリティ ID。 NULL 値は許可されません。
login_name nvarchar(128) 現在セッションを実行している SQL Server ログイン名。 セッションを作成した元のログイン名については、 original_login_nameを参照してください。 SQL Server の認証済みログイン名または Windows の認証済みドメイン ユーザー名を指定できます。 NULL 値は許可されません。
nt_domain nvarchar(128) セッションで Windows 認証または信頼された接続を使用している場合のクライアントの Windows ドメイン。 この値は、内部セッションと非ドメイン ユーザーに対して NULL されます。 Null 許容。
nt_user_name nvarchar(128) セッションで 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 許容。
reads bigint セッション中に、セッションの要求によって実行された読み取りの数。 NULL 値は許可されません。
writes 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に関連付けられている Windows セキュリティ ID。 NULL 値は許可されません。
original_login_name nvarchar(128) クライアントがこのセッションを作成するために使った SQL Server ログイン名。 SQL Server の認証済みログイン名、Windows の認証済みドメイン ユーザー名、または包含データベース ユーザーを指定できます。 セッションは、最初の接続後に、たとえば EXECUTE AS が使用されている場合など、多くの暗黙的または明示的なコンテキスト スイッチを通過している可能性があります。 NULL 値は許可されません。
last_successful_logon datetime 現在のセッションが開始される前に、 original_login_name の最後に成功したログオンの時刻。
last_unsuccessful_logon datetime 現在のセッションが開始される前に、 original_login_name のログオン試行が最後に失敗した時刻。
unsuccessful_logons bigint last_successful_logonlogin_timeの間のoriginal_login_nameのログオン試行が失敗した回数。
group_id int このセッションが属しているワークロード グループの ID。 NULL 値は許可されません。
database_id smallint 各セッションの現在のデータベースの ID。

Azure SQL Database では、値は 1 つのデータベースまたは Elastic Pool 内で一意ですが、論理サーバー内では一意ではありません。

適用対象: SQL Server 2012 (11.x) 以降のバージョン。
authenticating_database_id int プリンシパルを認証するデータベースの ID。 ログインの場合、値は 0。 包含データベース ユーザーの場合、値は包含データベースのデータベース ID です。

適用対象: SQL Server 2012 (11.x) 以降のバージョン。
open_transaction_count int セッションごとに開いているトランザクションの数。

適用対象: SQL Server 2012 (11.x) 以降のバージョン。
pdw_node_id int このディストリビューションがオンになっているノードの識別子。

適用対象: Azure Synapse Analytics および Analytics Platform System (PDW)。
page_server_reads bigint このセッションの間に、このセッションの要求によって実行されたページ サーバー読み取りの数。 NULL 値は許可されません。

適用対象: Azure SQL Database Hyperscale。

アクセス許可

すべてのユーザーが自分のセッション情報を確認できます。

SQL Server 2019 (15.x) 以前のバージョンでは、サーバー上のすべてのセッションを表示するために VIEW SERVER STATE が必要です。 SQL Server 2022 (16.x) 以降のバージョンでは、サーバー VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。

SQL Database では、現在のデータベースへのすべての接続を表示する VIEW DATABASE STATE が必要です。 master データベースで VIEW DATABASE STATE を付与することはできません。

解説

common criteria compliance enabled サーバー構成オプションを有効にすると、ログオン統計が次の列に表示されます。

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

このオプションが有効になっていない場合、これらの列は null 値を返します。 このサーバー構成オプションを設定する方法の詳細については、「 Server configuration: common criteria compliance enabled」を参照してください。

Azure SQL Database の管理者接続には、認証されたセッションごとに 1 行が表示されます。 結果セットに表示される sa セッションは、セッションのユーザー クォータには影響しません。 管理者以外の接続には、データベース ユーザー セッションに関連する情報のみが表示されます。

記録方法が異なるため、 open_transaction_countsys.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;