適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Microsoft 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 = Unspecified1 = ReadUncommitted2 = ReadCommitted3 = RepeatableRead4 = Serializable5 = 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_logonlast_unsuccessful_logonunsuccessful_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 APPLYOUTER 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;