sys.dm_exec_sessions(Transact-SQL)

적용 대상:SQL 서버Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric 의 SQL 분석 엔드포인트Microsoft Fabric 의 웨어하우스Microsoft Fabric의 SQL 데이터베이스

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

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

메모

Azure Synapse Analytics에서 이 뷰를 호출하려면 sys.dm_pdw_nodes_exec_sessions을 참조하세요. Azure Synapse Analytics(서버리스 SQL 풀 전용) 또는 Microsoft Fabric 용도로 사용 sys.dm_exec_sessions 하세요.

열 이름 데이터 형식 널러블 Description
session_id smallint No 각 활성 주 연결과 연관된 세션을 식별합니다.
login_time datetime No 세션이 설정된 시간입니다. 이 DMV를 조회할 때 완전히 로그인되지 않은 세션은 로그인 시간이 . 1900-01-01로 표시됩니다.
host_name nvarchar(128) Yes 세션에 특화된 클라이언트 워크스테이션 이름. 내부 세션에 대한 값입니다 NULL .

보안 참고: 클라이언트 애플리케이션은 워크스테이션 이름을 제공하고 부정확한 데이터를 제공할 수 있습니다. 보안 기능으로 의존 HOST_NAME 하지 마세요.
program_name nvarchar(128) Yes 세션을 시작한 클라이언트 프로그램의 이름입니다. 내부 세션에 대한 값입니다 NULL .
host_process_id int Yes 세션을 시작한 클라이언트 프로그램의 프로세스 ID입니다. 내부 세션에 대한 값입니다 NULL .
client_version int Yes 클라이언트가 서버에 연결하는 데 사용하는 인터페이스의 TDS 프로토콜 버전입니다. 내부 세션에 대한 값입니다 NULL .
client_interface_name nvarchar(32) Yes 클라이언트가 서버와 통신할 때 사용하는 라이브러리 또는 드라이버의 이름. 내부 세션에 대한 값입니다 NULL .
security_id varbinary(85) No 로그인과 연결된 Windows 보안 ID입니다.
login_name nvarchar(128) No 현재 세션이 실행되고 있는 SQL Server 로그인 이름입니다. 세션을 만든 원래 로그인 이름은 다음을 참조하세요 original_login_name. SQL Server 인증 로그인 이름 또는 Windows 인증 도메인 사용자 이름일 수 있습니다.
nt_domain nvarchar(128) Yes 세션에서 Windows 인증 또는 트러스트된 연결을 사용하는 경우 클라이언트의 Windows 도메인입니다. 이 값은 NULL 내부 세션 및 비 도메인 사용자를 위한 것입니다.
nt_user_name nvarchar(128) Yes 세션이 Windows 인증 또는 신뢰할 수 있는 연결을 사용하는 경우 클라이언트의 Windows 사용자 이름입니다. 이 값은 NULL 내부 세션 및 비 도메인 사용자를 위한 것입니다.
status nvarchar(30) No 세션의 상태입니다. 가능한 값:

Running - 현재 하나 이상의 요청을 실행 중입니다.
Sleeping - 현재 요청이 실행되지 않음
Dormant - 연결 풀링으로 인해 세션이 다시 설정되었으며 현재 사전 로그인 상태입니다.
Preconnect - 세션이 리소스 관리자 분류자입니다.
context_info varbinary(128) Yes CONTEXT_INFO 세션에 대한 값입니다. 사용자는 문장으로 SET CONTEXT_INFO 맥락 정보를 설정합니다.
cpu_time int No 이 세션에서 사용하는 CPU 시간(밀리초)입니다.
memory_usage int No 이 세션에서 사용하는 메모리의 8KB 페이지 수입니다.
total_scheduled_time int No 세션(내 요청)의 실행이 예약된 총 시간(밀리초)입니다.
total_elapsed_time int No 세션이 설정된 이후의 시간(밀리초)입니다.
endpoint_id int No 세션과 연결된 엔드포인트의 ID입니다.
last_request_start_time datetime No 세션의 마지막 요청이 시작된 시간입니다. 이 시간에는 현재 실행 중인 요청이 포함됩니다.
last_request_end_time datetime Yes 세션에 대한 요청의 마지막 완료 시간입니다.
reads bigint No 이 세션 내에서 요청에 의해 수행된 물리적 읽기 횟수.
writes 1 bigint No 이 세션 내에서 요청에 의해 수행된 물리적 쓰기 횟수.
logical_reads bigint No 이 세션 중에 이 세션의 요청에 의해 수행된 논리적 읽기 수입니다.
is_user_process bit No 0 세션이 시스템 세션이면 입니다. 아니면 1입니다.
text_size int No TEXTSIZE 세션에 대한 설정입니다.
language nvarchar(128) Yes LANGUAGE 세션에 대한 설정입니다.
date_format nvarchar(3) Yes DATEFORMAT 세션에 대한 설정입니다.
date_first smallint No DATEFIRST 세션에 대한 설정입니다.
quoted_identifier bit No QUOTED_IDENTIFIER 세션에 대한 설정입니다.
arithabort bit No ARITHABORT 세션에 대한 설정입니다.
ansi_null_dflt_on bit No ANSI_NULL_DFLT_ON 세션에 대한 설정입니다.
ansi_defaults bit No ANSI_DEFAULTS 세션에 대한 설정입니다.
ansi_warnings bit No ANSI_WARNINGS 세션에 대한 설정입니다.
ansi_padding bit No ANSI_PADDING 세션에 대한 설정입니다.
ansi_nulls bit No ANSI_NULLS 세션에 대한 설정입니다.
concat_null_yields_null bit No CONCAT_NULL_YIELDS_NULL 세션에 대한 설정입니다.
transaction_isolation_level smallint No 세션의 트랜잭션 격리 수준입니다.

0 = Unspecified
1 = ReadUncommitted
2 = ReadCommitted
3 = RepeatableRead
4 = Serializable
5 = Snapshot
lock_timeout int No LOCK_TIMEOUT 세션에 대한 설정입니다. 값은 밀리초 단위입니다.
deadlock_priority int No DEADLOCK_PRIORITY 세션에 대한 설정입니다.
row_count bigint No 세션에서 지금까지 반환된 행 수입니다.
prev_error int No 세션에서 반환된 마지막 오류의 ID입니다.
original_security_id varbinary(85) No 에 연결된 original_login_nameWindows 보안 ID입니다.
original_login_name nvarchar(128) No 클라이언트가 이 세션을 만드는 데 사용한 SQL Server 로그인 이름입니다. SQL Server 인증 로그인 이름, Windows 인증 도메인 사용자 이름 또는 포함된 데이터베이스 사용자일 수 있습니다. 예를 들어, EXECUTE AS 세션은 초기 연결 이후 여러 번의 암묵적 또는 명시적 컨텍스트 전환을 거쳤을 수 있습니다.
last_successful_logon datetime Yes 현재 세션이 시작되기 전의 original_login_name 마지막으로 성공한 로그온 시간입니다.
last_unsuccessful_logon datetime Yes 현재 세션이 시작되기 전의 마지막으로 실패한 로그온 시도 original_login_name 시간입니다.
unsuccessful_logons bigint Yes 와 사이의 original_login_name 로그온 시도 last_successful_logon 실패 횟수입니다login_time.
group_id int No 이 세션이 속한 작업 그룹의 ID입니다.
database_id smallint No 각 세션에 대한 현재 데이터베이스의 ID입니다.

Azure SQL Database에서 값은 단일 데이터베이스 또는 탄력적 풀 내에서 고유하지만 논리 서버 내에는 고유하지 않습니다.

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

적용 대상: SQL Server 2012(11.x) 이상 버전.
open_transaction_count int No 세션당 열린 트랜잭션 수입니다.

적용 대상: SQL Server 2012(11.x) 이상 버전.
pdw_node_id int No 이 배포가 있는 노드의 식별자입니다.

적용 대상: Azure Synapse Analytics.
page_server_reads bigint No 이 세션 중에 이 세션의 요청에 의해 수행된 페이지 서버 읽기 수입니다.

적용 대상: Azure SQL Database 하이퍼스케일.
contained_availability_group_id uniqueidentifier Yes 포함된 가용성 그룹의 식별자.

적용 대상: SQL Server 2022(16.x) 이상 버전
time_zone nvarchar(128) No 현재 세션 시간대 설정 값을 식별합니다. 기본값은 LOCAL입니다. 세션 시간대가 변경된 경우, 그 값은 시스템 뷰 열 sys.time_zone_info 에서 지정된 name 시간대 값을 포함합니다.

1 버퍼 풀에서 페이지가 더티로 표시될 때를 지정합니다. 이 값은 실제 쓰기 횟수와 직접적으로 동일하지 않은데, 같은 페이지가 여러 번 표시될 수 있기 때문입니다. 이 카운터들은 배치 종료 시 집계됩니다.

Permissions

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

SQL Server 2019 (15.x) 및 이전 버전 VIEW SERVER STATE 은 서버의 모든 세션을 확인해야 합니다. SQL Server 2022(16.x) 이상 버전에는 서버에 대한 권한이 필요합니다 VIEW SERVER PERFORMANCE STATE .

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

비고

서버 구성 옵션이 활성화되면 common criteria compliance enabled 다음 열에 로그인 통계가 표시됩니다:

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

옵션이 활성화되어 있지 않으면 common criteria compliance enabled , 이 열들은 null 값을 반환합니다. 이 서버 구성 옵션을 설정하는 방법에 대한 자세한 내용은 서버 구성: 일반적인 조건 준수 사용 설정을 참조하세요.

Azure SQL Database의 관리자 연결은 인증된 세션당 한 행으로 표시됩니다. 결과 세트에 나타나는 세션은 sa 세션 사용자 할당량에 영향을 주지 않습니다. 비관리자 연결은 데이터베이스 사용자 세션과 관련된 정보만 볼 수 있습니다.

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

관계 카디널리

보낸 사람 에게 켜기/적용 Relationship
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 일 대 일

Examples

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;

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;