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 시스템 테이블에 매핑됩니다.
적용 대상: SQL Server(SQL Server 2008 - 현재 버전), Windows Azure SQL 데이터베이스(최초 릴리스 - 현재 릴리스) |
열 이름 |
데이터 형식 |
설명 |
||
---|---|---|---|---|
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을 허용하지 않습니다. |
||
database_id |
smallint |
각 세션에 대한 현재 데이터베이스의 ID입니다.
|
||
authenticating_database_id |
int |
보안 주체를 인증하는 데이터베이스의 ID입니다. 로그인의 경우 값이 0이 됩니다. 포함된 데이터베이스 사용자의 경우 값은 포함된 데이터베이스의 데이터베이스 ID가 됩니다.
|
||
open_transaction_count |
int |
세션당 열린 트랜잭션 수입니다.
|
사용 권한
서버에 대한 VIEW SERVER STATE 권한이 필요합니다.
참고
서버에 대한 VIEW SERVER STATE 권한이 있는 경우 사용자는 SQL Server 인스턴스에서 실행 중인 모든 세션을 볼 수 있습니다. 그렇지 않은 경우에는 현재 세션만 볼 수 있습니다.
주의
common criteria compliance enabled 서버 구성 옵션이 설정된 경우 다음 열에 로그온 통계가 표시됩니다.
last_successful_logon
last_unsuccessful_logon
unsuccessful_logons
이 옵션이 설정되지 않은 경우 이러한 열에 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
);
4.쿼리 자체 연결에 대한 정보 찾기
쿼리 자체 연결에 대한 정보를 수집하는 일반 쿼리입니다.
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
JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE c.session_id = @@SPID;