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을 허용합니다.
값TDS 버전SQL Server 버전
04.2SQL Server 6.x
16.0SQL Server 6.x
27.0SQL Server 7.0
37.1SQL Server 2000
47.1 Revision 1SQL Server 2000 서비스 팩 1
57.2SQL Server 2005
67.3SQL Server 2008
|
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
);
변경 내역
업데이트된 내용 |
---|
client_version 열 설명에 값을 추가했습니다. |