sys.dm_exec_sessions(Transact-SQL)

적용 대상: Microsoft Fabric의 Microsoft FabricWarehouse에 있는 SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform System(PDW) SQL 분석 엔드포인트

SQL Server에서 인증된 세션당 한 행을 반환합니다. sys.dm_exec_sessions 는 모든 활성 사용자 연결 및 내부 작업에 대한 정보를 표시하는 서버 범위 보기입니다. 이 정보에는 클라이언트 버전, 클라이언트 프로그램 이름, 클라이언트 로그인 시간, 로그인 사용자, 현재 세션 설정 등이 포함됩니다. sys.dm_exec_sessions 먼저 현재 시스템 로드를 보고 관심 있는 세션을 식별한 다음 다른 동적 관리 뷰 또는 동적 관리 기능을 사용하여 해당 세션에 대한 자세한 정보를 알아봅니다.

sys.dm_exec_requestssys.dm_exec_sessions동적 관리 뷰는 sys.dm_exec_connections사용되지 않는 sys.sysprocesses 시스템 호환성 보기에 매핑됩니다.

참고 항목

Azure Synapse Analytics 또는 PDW(Analytics Platform System)의 전용 SQL 풀에서 이를 호출하려면 sys.dm_pdw_nodes_exec_sessions 참조하세요. 서버리스 SQL 풀 또는 Microsoft Fabric의 sys.dm_exec_sessions경우 .

열 이름 데이터 형식 설명 및 버전별 정보
session_id smallint 각 활성 기본 연결과 연결된 세션을 식별합니다. Null을 허용하지 않습니다.
login_time 날짜/시간 세션이 설정된 시간입니다. Null을 허용하지 않습니다. 이 DMV를 쿼리할 때 로그인을 완료하지 않은 세션은 로그인 시간으로 1900-01-01표시됩니다.
host_name nvarchar(128) 세션과 관련된 클라이언트 워크스테이션의 이름입니다. 내부 세션의 경우 값이 NULL입니다. Null을 허용합니다.

보안 참고: 클라이언트 애플리케이션은 워크스테이션 이름을 제공하며 부정확한 데이터를 제공할 수 있습니다. HOST_NAME 보안 기능으로 사용하지 마세요.
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 인증된 do기본 사용자 이름일 수 있습니다. Null을 허용하지 않습니다.
nt_do기본 nvarchar(128) 적용 대상: SQL Server 2008(10.0.x) 이상 버전

세션에서 Windows 인증 또는 트러스트된 연결을 사용하는 경우 클라이언트의 Windows 도메인입니다. 이 값은 내부 세션 및 비-할기본 사용자의 경우 NULL입니다. Null을 허용합니다.
nt_user_name nvarchar(128) 적용 대상: SQL Server 2008(10.0.x) 이상 버전

세션이 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 날짜/시간 세션의 마지막 요청이 시작된 시간입니다. 여기에는 현재 실행 중인 요청이 포함됩니다. Null을 허용하지 않습니다.
last_request_end_time 날짜/시간 세션에 대한 요청의 마지막 완료 시간입니다. Null을 허용합니다.
reads bigint 이 세션 중에 이 세션의 요청에 의해 수행된 읽기 수입니다. Null을 허용하지 않습니다.
writes bigint 이 세션 중에 이 세션의 요청에 의해 수행된 쓰기 수입니다. Null을 허용하지 않습니다.
logical_reads bigint 이 세션 중에 이 세션의 요청에 의해 수행된 논리적 읽기 수입니다. Null을 허용하지 않습니다.
is_user_process bit 시스템 세션인 경우에는 0이고, 그렇지 않으면 1입니다. Null을 허용하지 않습니다.
text_size int 세션에 대한 TEXTSIZE 설정입니다. Null을 허용하지 않습니다.
언어 nvarchar(128) 세션에 대한 언어 설정입니다. 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 = ReadUncommitted

2 = ReadCommitted

3 = RepeatableRead

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_nameMicrosoft Windows 보안 ID입니다. Null을 허용하지 않습니다.
original_login_name nvarchar(128) 클라이언트가 이 세션을 만드는 데 사용한 SQL Server 로그인 이름입니다. SQL Server 인증 로그인 이름, Windows 인증된 do기본 사용자 이름 또는 포함된 데이터베이스 사용자일 수 있습니다. 세션은 초기 연결 후 많은 암시적 또는 명시적 컨텍스트 스위치를 통과했을 수 있습니다. 예를 들어 EXECUTE AS를 사용하는 경우입니다. Null을 허용하지 않습니다.
last_successful_logon 날짜/시간 적용 대상: SQL Server 2008(10.0.x) 이상 버전

현재 세션이 시작되기 전에 original_login_name 마지막으로 성공한 로그온 시간입니다.
last_unsuccessful_logon 날짜/시간 적용 대상: SQL Server 2008(10.0.x) 이상 버전

현재 세션이 시작되기 전에 original_login_name 마지막으로 실패한 로그온 시도 시간입니다.
unsuccessful_logons bigint 적용 대상: SQL Server 2008(10.0.x) 이상 버전

와 사이의 last_successful_logon 로그온 시도 original_login_name 실패 횟수입니다login_time.
group_id int 이 세션이 속한 작업 그룹의 ID입니다. Null을 허용하지 않습니다.
database_id smallint 적용 대상: SQL Server 2012(11.x) 이상 버전

각 세션에 대한 현재 데이터베이스의 ID입니다.

Azure SQL Database에서 값은 단일 데이터베이스 또는 탄력적 풀 내에서 고유하지만 논리 서버 내에는 없습니다.
authenticating_database_id int 적용 대상: SQL Server 2012(11.x) 이상 버전

보안 주체를 인증하는 데이터베이스의 ID입니다. 로그인의 경우 값은 0입니다. 포함된 데이터베이스 사용자의 경우 값은 포함된 데이터베이스의 데이터베이스 ID입니다.
open_transaction_count int 적용 대상: SQL Server 2012(11.x) 이상 버전

세션당 열린 트랜잭션 수입니다.
pdw_node_id int 적용 대상: Azure Synapse Analytics, Analytics Platform System(PDW)

이 배포가 있는 노드의 식별자입니다.
page_server_reads bigint 적용 대상: Azure SQL Database 하이퍼스케일

이 세션 중에 이 세션의 요청에 의해 수행된 페이지 서버 읽기 수입니다. Null을 허용하지 않습니다.

사용 권한

모든 사용자는 자신의 세션 정보를 볼 수 있습니다.

SQL Server: 서버의 VIEW SERVER STATE 모든 세션을 보려면 SQL Server에 대한 권한이 필요합니다.

SQL Database:VIEW DATABASE STATE 현재 데이터베이스에 대한 모든 연결을 확인해야 합니다. VIEW DATABASE STATE 은 데이터베이스에 master 부여할 수 없습니다.

SQL Server 2022 이상에 대한 권한

서버에 대한 VIEW SERVER PERFORMANCE STATE 권한이 필요합니다.

설명

일반적인 조건 준수 사용 서버 구성 옵션을 사용하도록 설정하면 다음 열에 로그온 통계가 표시됩니다.

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

이 옵션을 사용하도록 설정하지 않으면 이러한 열은 null 값을 반환합니다. 이 서버 구성 옵션을 설정하는 방법에 대한 자세한 내용은 일반적인 조건 준수 사용 서버 구성 옵션을 참조 하세요.

Azure SQL Database의 관리자 연결에는 인증된 세션당 하나의 행이 표시됩니다. 결과 집합에 표시되는 "sa" 세션은 세션에 대한 사용자 할당량에 영향을 주지 않습니다. 관리자가 아닌 연결은 해당 데이터베이스 사용자 세션과 관련된 정보만 볼 수 있습니다.

기록 open_transaction_count 되는 방식의 차이로 인해 .open_transaction_count가 일치하지 sys.dm_tran_session_transactions않을 수 있습니다.

관계 카드

보낸 사람 수행할 작업 켜기/적용 관계
sys.dm_exec_sessions sys.dm_exec_requests session_id 일 대 0 또는 일 대 다
sys.dm_exec_sessions sys.dm_exec_connections session_id 일 대 0 또는 일 대 다
sys.dm_exec_sessions sys.dm_tran_session_transactions session_id 일 대 0 또는 일 대 다
sys.dm_exec_sessions sys.dm_exec_cursors(session_id | 0) SESSION_ID CROSS APPLY

OUTER APPLY
일 대 0 또는 일 대 다
sys.dm_exec_sessions sys.dm_db_session_space_usage session_id 일 대 일

예제

A. 서버에 연결된 사용자 찾기

다음 예제에서는 서버에 연결된 사용자를 찾고 각 사용자에 대한 세션 수를 반환합니다.

SELECT login_name,
    COUNT(session_id) AS session_count
FROM sys.dm_exec_sessions
GROUP BY login_name;

B. 장기 실행 커서 찾기

다음 예제에서는 특정 기간 이상 열려 있는 커서, 커서를 만든 사용자 및 커서가 있는 세션을 찾습니다.

USE master;
GO

SELECT creation_time,
    cursor_id,
    name,
    c.session_id,
    login_name
FROM sys.dm_exec_cursors(0) AS c
INNER JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id
WHERE DATEDIFF(mi, c.creation_time, GETDATE()) > 5;
GO

C. 열린 트랜잭션이 있는 유휴 세션 찾기

다음 예제에서는 열려 있는 트랜잭션이 있고 유휴 상태인 세션을 찾습니다. 유휴 세션은 현재 실행 중인 요청이 없는 세션입니다.

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

D. 쿼리 자체 연결에 대한 정보 찾기

다음 예제에서는 쿼리의 자체 연결에 대한 정보를 수집합니다.

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
INNER JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id
WHERE c.session_id = @@SPID;

다음 단계