sys.dm_exec_sessions(Transact-SQL)
SQL Server에서 인증된 세션당 행 하나를 반환합니다. sys.dm_exec_sessions는 모든 활성 사용자 연결 및 내부 태스크에 대한 정보를 표시하는 서버 범위 뷰입니다. 이 정보에는 클라이언트 버전, 클라이언트 프로그램 이름, 클라이언트 로그인 시간, 로그인 사용자, 현재 세션 설정 등이 포함됩니다. sys.dm_exec_sessions를 사용하여 우선 현재 시스템 로드를 보고 원하는 세션을 확인한 다음 다른 동적 관리 뷰 또는 동적 관리 함수를 사용하여 해당 세션에 대한 자세한 내용을 볼 수 있습니다.
sys.dm_exec_connections, sys.dm_exec_sessions 및 sys.dm_exec_requests 동적 관리 뷰는 sys.sysprocesses 시스템 테이블에 매핑됩니다.
열 이름 |
데이터 형식 |
설명 |
---|---|---|
session_id |
smallint |
각각의 기본 활성 연결과 연결된 세션을 식별합니다. Null을 허용하지 않습니다. |
login_time |
datetime |
세션이 설정된 시간입니다. Null을 허용하지 않습니다. |
host_name |
nvarchar(128) |
세션에 따라 달라지는 클라이언트 워크스테이션의 이름입니다. 내부 세션에 대한 값은 NULL입니다. Null을 허용합니다. |
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) |
로그인과 연결된 Microsoft 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) |
세션 상태입니다. 가능한 값은 다음과 같습니다.
Null을 허용하지 않습니다. |
context_info |
varbinary(128) |
세션의 CONTEXT_INFO 값입니다. 컨텍스트 정보는 사용자가 SET CONTEXT_INFO 문을 사용하여 설정합니다. Null을 허용합니다. |
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 |
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 = 지정되지 않음 1 = 커밋되지 않은 읽기 2 = 커밋된 읽기 3 = 반복 읽기 4 = 직렬화 가능 5 = 스냅숏 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과 연결된 Microsoft 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 |
original_login_name에 대해 last_successful_logon과 login_time 사이에 실패한 로그온 시도 횟수입니다. |
group_id |
int |
이 세션이 속한 작업 그룹의 ID입니다. Null을 허용하지 않습니다. |
사용 권한
서버에 대한 VIEW SERVER STATE 권한이 필요합니다.
[!참고]
서버에 대한 VIEW SERVER STATE 권한이 있는 경우 사용자는 SQL Server 인스턴스에서 실행 중인 모든 세션을 볼 수 있습니다. 그렇지 않은 경우에는 현재 세션만 볼 수 있습니다.
주의
Common Criteria 준수에 대한 로그인 통계
저장 프로시저 sp_configure를 사용하여 common criteria compliance enabled 옵션이 설정된 경우 로그인 통계는 sys.dm_exec_sessions의 다음 열에 저장되고 표시됩니다.
last_successful_logon
last_unsuccessful_logon
unsuccessful_logons
이 서버 구성 옵션이 설정되어 있지 않으면 sys.dm_exec_sessions 열에서 Null 값을 반환합니다. 이 서버 구성 옵션을 설정하는 방법은 common criteria compliance enabled 옵션을 참조하십시오.
관계 카디널리티
원본 |
대상 |
열 이름/APPLY |
관계 |
---|---|---|---|
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 |
일 대 일 |
예
1. 서버에 연결된 사용자 찾기
다음 예에서는 서버에 연결되는 사용자를 찾고 각 사용자에 대한 세션 수를 반환합니다.
SELECT login_name ,COUNT(session_id) AS session_count
FROM sys.dm_exec_sessions
GROUP BY login_name;
2. 장기 실행 커서 찾기
다음 예에서는 지정한 시간을 초과하여 열려 있는 커서, 해당 커서를 만든 사람 및 해당 커서가 있는 세션을 찾습니다.
USE master;
GO
SELECT creation_time ,cursor_id
,name ,c.session_id ,login_name
FROM sys.dm_exec_cursors(0) AS c
JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE DATEDIFF(mi, c.creation_time, GETDATE()) > 5;
3. 열려 있는 트랜잭션이 있는 유휴 세션 찾기
다음 예에서는 열려 있는 트랜잭션이 있는 유휴 세션을 찾습니다. 유휴 세션은 현재 실행되고 있는 요청이 없는 세션입니다.
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
);