Bagikan melalui


sys.dm_exec_sessions (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistem Platform Analitik (PDW)Titik akhir analitik SQL di Microsoft FabricGudang di Microsoft FabricDatabase SQL di Microsoft Fabric

Mengembalikan satu baris per sesi terautentikasi di SQL Server. sys.dm_exec_sessions adalah tampilan cakupan server yang memperlihatkan informasi tentang semua koneksi pengguna aktif dan tugas internal. Informasi ini mencakup versi klien, nama program klien, waktu masuk klien, pengguna masuk, pengaturan sesi saat ini, dan banyak lagi. Gunakan sys.dm_exec_sessions untuk terlebih dahulu melihat beban sistem saat ini dan untuk mengidentifikasi sesi yang menarik, lalu pelajari lebih lanjut tentang sesi tersebut dengan menggunakan tampilan manajemen dinamis lainnya atau fungsi manajemen dinamis.

Tampilan sys.dm_exec_connectionsmanajemen dinamis , sys.dm_exec_sessions, dan sys.dm_exec_requests peta ke tampilan kompatibilitas sistem sys.sysprocesses yang tidak digunakan lagi.

Catatan

Untuk memanggil tampilan ini dari Azure Synapse Analytics (hanya kumpulan SQL khusus) atau Sistem Platform Analytics (PDW), lihat sys.dm_pdw_nodes_exec_sessions. Gunakan sys.dm_exec_sessions untuk Azure Synapse Analytics (hanya kumpulan SQL tanpa server) atau Microsoft Fabric.

Nama kolom Jenis Data Bisa bernilai null Description
session_id smallint Tidak. Mengidentifikasi sesi yang terkait dengan setiap koneksi utama aktif.
login_time datetime Tidak. Waktu ketika sesi dibuat. Sesi yang belum sepenuhnya masuk pada saat DMV ini dikueri, ditampilkan dengan waktu 1900-01-01masuk .
host_name nvarchar(128) Yes Nama workstation klien yang khusus untuk sesi. Nilainya adalah NULL untuk sesi internal.

Catatan keamanan: Aplikasi klien menyediakan nama stasiun kerja dan dapat memberikan data yang tidak akurat. Jangan mengandalkan HOST_NAME sebagai fitur keamanan.
program_name nvarchar(128) Yes Nama program klien yang memulai sesi. Nilainya adalah NULL untuk sesi internal.
host_process_id int Yes ID proses program klien yang memulai sesi. Nilainya adalah NULL untuk sesi internal.
client_version int Yes Versi protokol TDS dari antarmuka yang digunakan oleh klien untuk terhubung ke server. Nilainya adalah NULL untuk sesi internal.
client_interface_name nvarchar(32) Yes Nama pustaka/driver yang digunakan oleh klien untuk berkomunikasi dengan server. Nilainya adalah NULL untuk sesi internal.
security_id varbinary(85) Tidak. ID keamanan Windows yang terkait dengan log masuk.
login_name nvarchar(128) Tidak. Nama masuk SQL Server tempat sesi sedang dijalankan. Untuk nama login asli yang membuat sesi, lihat original_login_name. Bisa menjadi nama masuk terautentikasi SQL Server atau nama pengguna domain terautentikasi Windows.
nt_domain nvarchar(128) Yes Domain Windows untuk klien jika sesi menggunakan Autentikasi Windows atau koneksi tepercaya. Nilai NULL ini untuk sesi internal dan pengguna non-domain.
nt_user_name nvarchar(128) Yes Nama pengguna Windows untuk klien jika sesi menggunakan Autentikasi Windows atau koneksi tepercaya. Nilai NULL ini untuk sesi internal dan pengguna non-domain.
status nvarchar(30) Tidak. Status sesi. Nilai yang mungkin:

Running - Saat ini menjalankan satu atau beberapa permintaan
Sleeping - Saat ini tidak menjalankan permintaan
Dormant - Sesi direset karena pengumpulan koneksi dan sekarang dalam status pralogin.
Preconnect - Sesi ada di pengklasifikasi Resource Governor.
context_info varbinary(128) Yes CONTEXT_INFO nilai untuk sesi. Informasi konteks diatur oleh pengguna dengan menggunakan pernyataan SET CONTEXT_INFO .
cpu_time int Tidak. Waktu CPU, dalam milidetik, digunakan oleh sesi ini.
memory_usage int Tidak. Jumlah halaman memori 8 KB yang digunakan oleh sesi ini.
total_scheduled_time int Tidak. Total waktu, dalam milidetik, di mana sesi (permintaan di dalamnya) dijadwalkan untuk eksekusi.
total_elapsed_time int Tidak. Waktu, dalam milidetik, sejak sesi ditetapkan.
endpoint_id int Tidak. ID titik akhir yang terkait dengan sesi.
last_request_start_time datetime Tidak. Waktu di mana permintaan terakhir pada sesi dimulai. Kali ini mencakup permintaan yang sedang dijalankan.
last_request_end_time datetime Yes Waktu penyelesaian permintaan terakhir pada sesi.
reads bigint Tidak. Jumlah pembacaan fisik yang dilakukan, berdasarkan permintaan dalam sesi ini, selama sesi ini.
writes 1 bigint Tidak. Jumlah penulisan fisik yang dilakukan, berdasarkan permintaan dalam sesi ini, selama sesi ini.
logical_reads bigint Tidak. Jumlah pembacaan logis yang dilakukan, berdasarkan permintaan dalam sesi ini, selama sesi ini.
is_user_process bit Tidak. 0 jika sesi adalah sesi sistem. Jika tidak, itu 1adalah .
text_size int Tidak. TEXTSIZE pengaturan untuk sesi.
language nvarchar(128) Yes LANGUAGE pengaturan untuk sesi.
date_format nvarchar(3) Yes DATEFORMAT pengaturan untuk sesi.
date_first smallint Tidak. DATEFIRST pengaturan untuk sesi.
quoted_identifier bit Tidak. QUOTED_IDENTIFIER pengaturan untuk sesi.
arithabort bit Tidak. ARITHABORT pengaturan untuk sesi.
ansi_null_dflt_on bit Tidak. ANSI_NULL_DFLT_ON pengaturan untuk sesi.
ansi_defaults bit Tidak. ANSI_DEFAULTS pengaturan untuk sesi.
ansi_warnings bit Tidak. ANSI_WARNINGS pengaturan untuk sesi.
ansi_padding bit Tidak. ANSI_PADDING pengaturan untuk sesi.
ansi_nulls bit Tidak. ANSI_NULLS pengaturan untuk sesi.
concat_null_yields_null bit Tidak. CONCAT_NULL_YIELDS_NULL pengaturan untuk sesi.
transaction_isolation_level smallint Tidak. Tingkat isolasi transaksi sesi.

0 = Unspecified
1 = ReadUncommitted
2 = ReadCommitted
3 = RepeatableRead
4 = Serializable
5 = Snapshot
lock_timeout int Tidak. LOCK_TIMEOUT pengaturan untuk sesi. Nilainya dalam milidetik.
deadlock_priority int Tidak. DEADLOCK_PRIORITY pengaturan untuk sesi.
row_count bigint Tidak. Jumlah baris yang dikembalikan pada sesi hingga titik ini.
prev_error int Tidak. ID kesalahan terakhir yang dikembalikan pada sesi.
original_security_id varbinary(85) Tidak. ID keamanan Windows yang terkait dengan original_login_name.
original_login_name nvarchar(128) Tidak. Nama masuk SQL Server yang digunakan klien untuk membuat sesi ini. Bisa menjadi nama masuk terautentikasi SQL Server, nama pengguna domain terautentikasi Windows, atau pengguna database mandiri. Sesi mungkin telah melalui banyak sakelar konteks implisit atau eksplisit setelah koneksi awal, misalnya, jika EXECUTE AS digunakan.
last_successful_logon datetime Yes Waktu masuk terakhir yang berhasil untuk original_login_name sebelum sesi saat ini dimulai.
last_unsuccessful_logon datetime Yes Waktu upaya masuk terakhir yang gagal untuk original_login_name sebelum sesi saat ini dimulai.
unsuccessful_logons bigint Yes Jumlah upaya masuk yang tidak berhasil untuk original_login_name antara last_successful_logon dan login_time.
group_id int Tidak. ID grup beban kerja tempat sesi ini berada.
database_id smallint Tidak. ID database saat ini untuk setiap sesi.

Di Azure SQL Database, nilainya unik dalam satu database atau kumpulan elastis, tetapi tidak dalam server logis.

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.
authenticating_database_id int Yes ID database yang mengautentikasi prinsipal. Untuk login, nilainya adalah 0. Untuk pengguna database mandiri, nilainya adalah ID database dari database yang terkandung.

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.
open_transaction_count int Tidak. Jumlah transaksi terbuka per sesi.

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.
pdw_node_id int Tidak. Pengidentifikasi untuk simpul tempat distribusi ini aktif.

Berlaku untuk: Azure Synapse Analytics, dan Analytics Platform System (PDW).
page_server_reads bigint Tidak. Jumlah pembacaan server halaman yang dilakukan, berdasarkan permintaan dalam sesi ini, selama sesi ini.

Berlaku untuk: Azure SQL Database Hyperscale.
contained_availability_group_id pengidentifikasi unik Yes ID grup ketersediaan yang terkandung.

Berlaku untuk: SQL Server 2025 (17.x) dan versi yang lebih baru.

1 Menentukan kapan halaman ditandai kotor di kumpulan buffer. Nilai ini tidak secara langsung sama dengan penulisan aktual, karena halaman yang sama dapat ditandai lebih dari sekali. Penghitung ini dikumpulkan di akhir batch.

Izin

Setiap orang dapat melihat informasi sesi mereka sendiri.

Di SQL Server 2019 (15.x) dan versi yang lebih lama, perlu VIEW SERVER STATE melihat semua sesi di server. Di SQL Server 2022 (16.x) dan versi yang lebih baru, memerlukan VIEW SERVER PERFORMANCE STATE izin di server.

Di SQL Database, perlu VIEW DATABASE STATE melihat semua koneksi ke database saat ini. VIEW DATABASE STATE tidak dapat diberikan dalam master database.

Keterangan

common criteria compliance enabled Saat opsi konfigurasi server diaktifkan, statistik masuk ditampilkan di kolom berikut.

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

Jika opsi ini tidak diaktifkan, kolom ini mengembalikan nilai null. Untuk informasi selengkapnya tentang cara mengatur opsi konfigurasi server ini, lihat Mengaktifkan konfigurasi kepatuhan kriteria umum.

Koneksi admin di Azure SQL Database melihat satu baris per sesi terautentikasi. Sesi sa yang muncul di resultset, tidak berpengaruh pada kuota pengguna untuk sesi. Koneksi non-admin hanya melihat informasi yang terkait dengan sesi pengguna database mereka.

Karena perbedaan dalam cara mereka direkam, open_transaction_count mungkin tidak cocok sys.dm_tran_session_transactionsdengan .open_transaction_count.

Kardinalitas hubungan

Dari Untuk Aktif/Terapkan Hubungan
sys.dm_exec_sessions sys.dm_exec_requests session_id Satu-ke-nol atau satu-ke-banyak
sys.dm_exec_sessions sys.dm_exec_connections session_id Satu-ke-nol atau satu-ke-banyak
sys.dm_exec_sessions sys.dm_tran_session_transactions session_id Satu-ke-nol atau satu-ke-banyak
sys.dm_exec_sessions sys.dm_exec_cursors (session_id | 0) session_id CROSS APPLY
OUTER APPLY
Satu-ke-nol atau satu-ke-banyak
sys.dm_exec_sessions sys.dm_db_session_space_usage session_id One-to-one

Contoh

J. Menemukan pengguna yang tersambung ke server

Contoh berikut menemukan pengguna yang tersambung ke server dan mengembalikan jumlah sesi untuk setiap pengguna.

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

B. Menemukan kursor yang berjalan lama

Contoh berikut menemukan kursor yang terbuka selama lebih dari periode waktu tertentu, siapa yang membuat kursor, dan sesi apa kursor berada.

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. Menemukan sesi diam yang memiliki transaksi terbuka

Contoh berikut menemukan sesi yang memiliki transaksi terbuka dan menganggur. Sesi diam adalah sesi yang tidak memiliki permintaan yang saat ini berjalan.

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. Menemukan informasi tentang koneksi kueri sendiri

Contoh berikut mengumpulkan informasi tentang koneksi kueri sendiri:

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;