sys.dm_exec_sessions(Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウスMicrosoft Fabric の SQL データベース

sys.dm_exec_sessions動的管理ビューは、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 システム互換性ビューに対応します。

Note

このビューをAzure Synapse Analyticsから呼び出すには(専用SQLプールのみ)sys.dm_pdw_nodes_exec_sessionsを参照してください。 Azure Synapse Analytics(サーバーレスSQLプールのみ)やMicrosoft Fabricには sys.dm_exec_sessions を使いましょう。

列名 データの種類 ヌラブル 説明
session_id smallint いいえ アクティブな各プライマリ接続に関連付けられたセッションを識別します。
login_time datetime いいえ セッションが確立された時刻。 このDMVに問い合わせられた時点で完全にログインされていないセッションは、ログイン時間が 1900-01-01で表示されます。
host_name nvarchar(128) はい セッション専用のクライアントワークステーションの名前です。 この値は、内部セッションに対して NULL 。

セキュリティ上の注意: クライアント アプリケーションはワークステーション名を提供し、不正確なデータを提供する可能性があります。 セキュリティ機能として HOST_NAME に依存しないでください。
program_name nvarchar(128) はい セッションを開始したクライアント プログラムの名前。 この値は、内部セッションに対して NULL 。
host_process_id int はい セッションを開始したクライアント プログラムのプロセス ID。 この値は、内部セッションに対して NULL 。
client_version int はい クライアントがサーバーに接続するために使用するインターフェースのTDSプロトコルバージョン。 この値は、内部セッションに対して NULL 。
client_interface_name nvarchar(32) はい クライアントがサーバーと通信するために使用するライブラリ名またはドライバ名。 この値は、内部セッションに対して NULL 。
security_id varbinary(85) いいえ ログインに関連付けられている Windows セキュリティ ID。
login_name nvarchar(128) いいえ 現在セッションを実行している SQL Server ログイン名。 セッションを作成した元のログイン名については、 original_login_nameを参照してください。 SQL Server の認証済みログイン名または Windows の認証済みドメイン ユーザー名を指定できます。
nt_domain nvarchar(128) はい セッションで Windows 認証または信頼された接続を使用している場合のクライアントの Windows ドメイン。 この値は、内部セッションと非ドメイン ユーザーに対して NULL されます。
nt_user_name nvarchar(128) はい セッションで Windows 認証または信頼された接続を使用している場合のクライアントの Windows ユーザー名。 この値は、内部セッションと非ドメイン ユーザーに対して NULL されます。
status nvarchar(30) いいえ セッションの状態。 指定できる値

Running - 現在 1 つ以上の要求を実行しています
Sleeping - 現在、要求を実行していない
Dormant - 接続プールが原因でセッションがリセットされ、プレログイン状態になりました。
Preconnect - セッションはリソース ガバナー分類子にあります。
context_info varbinary (128) はい CONTEXT_INFO セッションの値。 ユーザーは SET CONTEXT_INFO 文でコンテキスト情報を設定します。
cpu_time int いいえ このセッションで使われた CPU 時間 (ミリ秒単位)。
memory_usage int いいえ セッションで使用されたメモリの 8 KB ページの数。
total_scheduled_time int いいえ セッション (セッション内の要求) でスケジュールされていた実行の合計時間 (ミリ秒単位)。
total_elapsed_time int いいえ セッションが確立されてから経過した時間 (ミリ秒単位)。
endpoint_id int いいえ セッションに関連付けられているエンドポイントの ID。
last_request_start_time datetime いいえ セッションで要求が最後に開始された時刻。 今回は、現在実行中の要求が含まれます。
last_request_end_time datetime はい セッションで要求が最後に完了した時刻。
reads bigint いいえ このセッション中にリクエストによって実行された物理読み取りの数。
writes 1 bigint いいえ このセッション中にリクエストによって実行された物理的な書き込みの数。
logical_reads bigint いいえ このセッションの間に、このセッションの要求によって実行された論理読み取りの数。
is_user_process bit いいえ 0 セッションがシステム セッションの場合は 。 それ以外の場合は、1 となります。
text_size int いいえ TEXTSIZE セッションの設定。
language nvarchar(128) はい LANGUAGE セッションの設定。
date_format nvarchar(3) はい DATEFORMAT セッションの設定。
date_first smallint いいえ DATEFIRST セッションの設定。
quoted_identifier bit いいえ QUOTED_IDENTIFIER セッションの設定。
arithabort bit いいえ ARITHABORT セッションの設定。
ansi_null_dflt_on bit いいえ ANSI_NULL_DFLT_ON セッションの設定。
ansi_defaults bit いいえ ANSI_DEFAULTS セッションの設定。
ansi_warnings bit いいえ ANSI_WARNINGS セッションの設定。
ansi_padding bit いいえ ANSI_PADDING セッションの設定。
ansi_nulls bit いいえ ANSI_NULLS セッションの設定。
concat_null_yields_null bit いいえ CONCAT_NULL_YIELDS_NULL セッションの設定。
transaction_isolation_level smallint いいえ セッションのトランザクション分離レベル。

0 = Unspecified
1 = ReadUncommitted
2 = ReadCommitted
3 = RepeatableRead
4 = Serializable
5 = Snapshot
lock_timeout int いいえ LOCK_TIMEOUT セッションの設定。 値の単位はミリ秒です。
deadlock_priority int いいえ DEADLOCK_PRIORITY セッションの設定。
row_count bigint いいえ セッションでこの時点までに返された行の数。
prev_error int いいえ セッションで最後に返されたエラーの ID。
original_security_id varbinary(85) いいえ original_login_nameに関連付けられている Windows セキュリティ ID。
original_login_name nvarchar(128) いいえ クライアントがこのセッションを作成するために使った SQL Server ログイン名。 SQL Server の認証済みログイン名、Windows の認証済みドメイン ユーザー名、または包含データベース ユーザーを指定できます。 例えば、 EXECUTE AS が使用されている場合、最初の接続後に多くの暗黙的または明示的なコンテキストスイッチを経てセッションが行われている可能性があります。
last_successful_logon datetime はい 現在のセッションが開始される前に、 original_login_name の最後に成功したログオンの時刻。
last_unsuccessful_logon datetime はい 現在のセッションが開始される前に、 original_login_name のログオン試行が最後に失敗した時刻。
unsuccessful_logons bigint はい original_login_nameとlast_successful_logonの間のlogin_timeのログオン試行が失敗した回数。
group_id int いいえ このセッションが属しているワークロード グループの ID。
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。
page_server_reads bigint いいえ このセッションの間に、このセッションの要求によって実行されたページ サーバー読み取りの数。

適用対象: Azure SQL Database Hyperscale。
contained_availability_group_id uniqueidentifier はい 含まれた可用性グループのIDです。

適用対象: SQL Server 2022 (16.x) 以降のバージョン。
time_zone nvarchar(128) いいえ 現在のセッションのタイムゾーン設定値を特定します。 既定値は LOCAL です。 セッションタイムゾーンが変更された場合、その値はsys.time_zone_infoシステムビューの列nameから指定されたタイムゾーン値を含む。

1 バッファプールでページがダーティとマークされるタイミングを指定します。 この値は実際の書き込みと直接は一致しません。なぜなら、同じページが複数回マークされる可能性があるからです。 これらのカウンターはバッチの最後に集約されます。

Permissions

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

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

Azure SQL Database現在のデータベースへのすべての接続を確認するためにVIEW DATABASE STATEが必要です。 masterデータベースではVIEW DATABASE STATEを付与できません。

注釈

common criteria compliance enabledサーバー設定オプションを有効にすると、以下の列にログオン統計が表示されます:

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

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

Azure SQL Databaseの管理者接続は認証されたセッションごとに1行が表示されます。 結果セットに表示される sa セッションはセッションのユーザークオータに影響を与えません。 管理者でない接続は、自分のデータベースユーザーセッションに関連する情報しか見られません。

記録方法が異なるため、 open_transaction_count が sys.dm_tran_session_transactions.open_transaction_countと一致しない可能性があります。

リレーションシップのカーディナリティ

差出人 〜へ オン/適用 Relationship
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 一対一

Examples

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;

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;