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_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) | ログインに関連付けられている 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_logon とlogin_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_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;