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)

세션 상태입니다. 가능한 값은 다음과 같습니다.

  • 실행 중 - 현재 하나 이상의 요청을 실행 중입니다.

  • 중지 중 - 현재 실행 중인 요청이 없습니다.

  • 유휴 상태 - 연결 풀링으로 인해 세션이 다시 설정되어 이제 로그인하기 전 상태가 되었습니다.

  • Preconnect - 세션은 리소스 관리자의 분류자에 있습니다.

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 열 설명에 값을 추가했습니다.