sys.dm_exec_sessions(Transact-SQL)
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스
SQL Server에서 인증된 세션당 한 행을 반환합니다. sys.dm_exec_sessions
는 모든 활성 사용자 연결 및 내부 작업에 대한 정보를 표시하는 서버 범위 보기입니다. 이 정보에는 클라이언트 버전, 클라이언트 프로그램 이름, 클라이언트 로그인 시간, 로그인 사용자, 현재 세션 설정 등이 포함됩니다. sys.dm_exec_sessions
먼저 현재 시스템 로드를 보고 관심 있는 세션을 식별한 다음 다른 동적 관리 뷰 또는 동적 관리 기능을 사용하여 해당 세션에 대한 자세한 정보를 알아봅니다.
및 sys.dm_exec_requests
sys.dm_exec_sessions
동적 관리 뷰는 sys.dm_exec_connections
사용되지 않는 sys.sysprocesses 시스템 호환성 보기에 매핑됩니다.
참고 항목
Azure Synapse Analytics 또는 PDW(Analytics Platform System)의 전용 SQL 풀에서 이를 호출하려면 sys.dm_pdw_nodes_exec_sessions 참조하세요. 서버리스 SQL 풀 또는 Microsoft Fabric의 sys.dm_exec_sessions
경우 .
열 이름 | 데이터 형식 | 설명 및 버전별 정보 |
---|---|---|
session_id |
smallint | 각 활성 주 연결과 연관된 세션을 식별합니다. Null을 허용하지 않습니다. |
login_time |
날짜/시간 | 세션이 설정된 시간입니다. Null을 허용하지 않습니다. 이 DMV를 쿼리할 때 완전히 로그인되지 않은 세션은 로그인 시간으로 1900-01-01 표시됩니다. |
host_name |
nvarchar(128) | 세션과 관련된 클라이언트 워크스테이션의 이름입니다. 내부 세션에 대한 값입니다 NULL . Nullable.보안 참고: 클라이언트 애플리케이션은 워크스테이션 이름을 제공하고 부정확한 데이터를 제공할 수 있습니다. 보안 기능으로 의존 HOST_NAME 하지 마세요. |
program_name |
nvarchar(128) | 세션을 시작한 클라이언트 프로그램의 이름입니다. 내부 세션에 대한 값입니다 NULL . Nullable. |
host_process_id |
int | 세션을 시작한 클라이언트 프로그램의 프로세스 ID입니다. 내부 세션에 대한 값입니다 NULL . Nullable. |
client_version |
int | 클라이언트가 서버에 연결하는 데 사용하는 인터페이스의 TDS 프로토콜 버전입니다. 내부 세션에 대한 값입니다 NULL . Nullable. |
client_interface_name |
nvarchar(32) | 클라이언트가 서버와 통신하는 데 사용하는 라이브러리/드라이버의 이름입니다. 내부 세션에 대한 값입니다 NULL . Nullable. |
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 내부 세션 및 비 도메인 사용자를 위한 것입니다. Nullable. |
nt_user_name |
nvarchar(128) | 세션이 Windows 인증 또는 신뢰할 수 있는 연결을 사용하는 경우 클라이언트의 Windows 사용자 이름입니다. 이 값은 NULL 내부 세션 및 비 도메인 사용자를 위한 것입니다. Nullable. |
status |
nvarchar(30) | 세션의 상태입니다. 가능한 값:Running - 현재 하나 이상의 요청을 실행 중입니다.Sleeping - 현재 요청이 실행되지 않음Dormant - 연결 풀링으로 인해 세션이 다시 설정되었으며 현재 사전 로그인 상태입니다.Preconnect - 세션이 리소스 관리자 분류자입니다.Null을 허용하지 않습니다. |
context_info |
varbinary(128) | CONTEXT_INFO 세션에 대한 값입니다. 컨텍스트 정보는 SET CONTEXT_INFO 문을 사용하여 사용자가 설정합니다. Nullable. |
cpu_time |
int | 이 세션에서 사용하는 CPU 시간(밀리초)입니다. Null을 허용하지 않습니다. |
memory_usage |
int | 이 세션에서 사용하는 메모리의 8KB 페이지 수입니다. Null을 허용하지 않습니다. |
total_scheduled_time |
int | 세션(내 요청)의 실행이 예약된 총 시간(밀리초)입니다. Null을 허용하지 않습니다. |
total_elapsed_time |
int | 세션이 설정된 이후의 시간(밀리초)입니다. Null을 허용하지 않습니다. |
endpoint_id |
int | 세션과 연결된 엔드포인트의 ID입니다. Null을 허용하지 않습니다. |
last_request_start_time |
날짜/시간 | 세션의 마지막 요청이 시작된 시간입니다. 이 시간에는 현재 실행 중인 요청이 포함됩니다. Null을 허용하지 않습니다. |
last_request_end_time |
날짜/시간 | 세션에 대한 요청의 마지막 완료 시간입니다. Nullable. |
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 세션에 대한 설정입니다. Nullable. |
date_format |
nvarchar(3) | DATEFORMAT 세션에 대한 설정입니다. Nullable. |
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 |
날짜/시간 | 현재 세션이 시작되기 전의 original_login_name 마지막으로 성공한 로그온 시간입니다. |
last_unsuccessful_logon |
날짜/시간 | 현재 세션이 시작되기 전의 마지막으로 실패한 로그온 시도 original_login_name 시간입니다. |
unsuccessful_logons |
bigint | 와 사이의 last_successful_logon 로그온 시도 original_login_name 실패 횟수입니다login_time . |
group_id |
int | 이 세션이 속한 작업 그룹의 ID입니다. Null을 허용하지 않습니다. |
database_id |
smallint | 각 세션에 대한 현재 데이터베이스의 ID입니다. Azure SQL Database에서 값은 단일 데이터베이스 또는 탄력적 풀 내에서 고유하지만 논리 서버 내에는 고유하지 않습니다. 적용 대상: 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 및 PDW(Analytics Platform System). |
page_server_reads |
bigint | 이 세션 중에 이 세션의 요청에 의해 수행된 페이지 서버 읽기 수입니다. Null을 허용하지 않습니다. 적용 대상: Azure SQL Database 하이퍼스케일. |
사용 권한
모든 사용자는 자신의 세션 정보를 볼 수 있습니다.
SQL Server 2019(15.x) 및 이전 버전에서는 서버의 모든 세션을 확인해야 합니다 VIEW SERVER STATE
. SQL Server 2022(16.x) 이상 버전에서는 서버에 대한 권한이 필요합니다 VIEW SERVER PERFORMANCE STATE
.
SQL Database VIEW DATABASE STATE
에서 현재 데이터베이스에 대한 모든 연결을 확인해야 합니다. VIEW DATABASE STATE
은 데이터베이스에 master
부여할 수 없습니다.
설명
common criteria compliance enabled
서버 구성 옵션을 사용하도록 설정하면 다음 열에 로그온 통계가 표시됩니다.
last_successful_logon
last_unsuccessful_logon
unsuccessful_logons
이 옵션을 사용하도록 설정하지 않으면 이러한 열은 null 값을 반환합니다. 이 서버 구성 옵션을 설정하는 방법에 대한 자세한 내용은 서버 구성: 일반적인 조건 준수 사용 설정을 참조하세요.
Azure SQL Database의 관리자 연결에는 인증된 세션당 하나의 행이 표시됩니다. 결과 집합에 표시되는 세션은 sa
세션에 대한 사용자 할당량에 영향을 주지 않습니다. 관리자가 아닌 연결은 해당 데이터베이스 사용자 세션과 관련된 정보만 볼 수 있습니다.
기록 open_transaction_count
되는 방식의 차이로 인해 .open_transaction_count
가 일치하지 sys.dm_tran_session_transactions
않을 수 있습니다.
관계 카디널리
보낸 사람 | 수행할 작업 | 켜기/적용 | 관계 |
---|---|---|---|
sys.dm_exec_sessions |
sys.dm_exec_requests | session_id |
일 대 0 또는 일 대 다 |
sys.dm_exec_sessions |
sys.dm_exec_connections | session_id |
일 대 0 또는 일 대 다 |
sys.dm_exec_sessions |
sys.dm_tran_session_transactions | session_id |
일 대 0 또는 일 대 다 |
sys.dm_exec_sessions |
sys.dm_exec_cursors( | session_id 0 ) |
session_id CROSS APPLY OUTER APPLY |
일 대 0 또는 일 대 다 |
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;