다음을 통해 공유


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)

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

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

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

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

  • 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
    );