sys.dm_exec_sessions (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse 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 ini dari kumpulan SQL khusus di Azure Synapse Analytics atau Analytics Platform System (PDW), lihat sys.dm_pdw_nodes_exec_sessions. Untuk kumpulan SQL tanpa server atau penggunaan sys.dm_exec_sessionsMicrosoft Fabric .

Nama kolom Jenis data Deskripsi dan informasi khusus versi
id_sesi smallint Mengidentifikasi sesi yang terkait dengan setiap koneksi utama aktif. Tidak dapat diubah ke null.
login_time datetime Waktu ketika sesi dibuat. Tidak dapat diubah ke null. Sesi yang belum selesai masuk, pada saat DMV ini dikueri, ditampilkan dengan waktu 1900-01-01masuk .
nama_host nvarchar(128) Nama stasiun kerja klien yang khusus untuk sesi. Nilainya adalah NULL untuk sesi internal. Dapat diubah ke null.

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) Nama program klien yang memulai sesi. Nilainya adalah NULL untuk sesi internal. Dapat diubah ke null.
host_process_id int ID proses program klien yang memulai sesi. Nilainya adalah NULL untuk sesi internal. Dapat diubah ke null.
client_version int Versi protokol TDS antarmuka yang digunakan oleh klien untuk terhubung ke server. Nilainya adalah NULL untuk sesi internal. Dapat diubah ke null.
client_interface_name nvarchar(32) Nama pustaka/driver yang digunakan oleh klien untuk berkomunikasi dengan server. Nilainya adalah NULL untuk sesi internal. Dapat diubah ke null.
security_id varbinary(85) ID keamanan Microsoft Windows yang terkait dengan login. Tidak dapat diubah ke null.
login_name nvarchar(128) 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. Tidak dapat diubah ke null.
nt_domain nvarchar(128) Berlaku untuk: SQL Server 2008 (10.0.x) dan versi yang lebih baru

Domain Windows untuk klien jika sesi menggunakan Autentikasi Windows atau koneksi tepercaya. Nilai ini adalah NULL untuk sesi internal dan pengguna non-domain. Dapat diubah ke null.
nt_user_name nvarchar(128) Berlaku untuk: SQL Server 2008 (10.0.x) dan versi yang lebih baru

Nama pengguna Windows untuk klien jika sesi menggunakan Autentikasi Windows atau koneksi tepercaya. Nilai ini adalah NULL untuk sesi internal dan pengguna non-domain. Dapat diubah ke null.
status nvarchar(30) Status sesi. Nilai yang mungkin:

Berjalan - Saat ini menjalankan satu atau beberapa permintaan

Tidur - Saat ini tidak menjalankan permintaan

Dormant - Sesi telah direset karena pengumpulan koneksi dan sekarang dalam status pralogin.

Prasambung - Sesi ada di pengklasifikasi Resource Governor.

Tidak dapat diubah ke null.
context_info varbinary(128) CONTEXT_INFO nilai untuk sesi. Informasi konteks diatur oleh pengguna dengan menggunakan pernyataan SET CONTEXT_INFO . Dapat diubah ke null.
cpu_time int Waktu CPU, dalam milidetik, digunakan oleh sesi ini. Tidak dapat diubah ke null.
memory_usage int Jumlah halaman memori 8 KB yang digunakan oleh sesi ini. Tidak dapat diubah ke null.
total_scheduled_time int Total waktu, dalam milidetik, di mana sesi (permintaan di dalamnya) dijadwalkan untuk eksekusi. Tidak dapat diubah ke null.
total_elapsed_time int Waktu, dalam milidetik, sejak sesi ditetapkan. Tidak dapat diubah ke null.
endpoint_id int ID Titik Akhir yang terkait dengan sesi. Tidak dapat diubah ke null.
last_request_start_time datetime Waktu di mana permintaan terakhir pada sesi dimulai. Ini termasuk permintaan yang sedang dijalankan. Tidak dapat diubah ke null.
last_request_end_time datetime Waktu penyelesaian permintaan terakhir pada sesi. Dapat diubah ke null.
baca bigint Jumlah bacaan yang dilakukan, berdasarkan permintaan dalam sesi ini, selama sesi ini. Tidak dapat diubah ke null.
tulis bigint Jumlah penulisan yang dilakukan, berdasarkan permintaan dalam sesi ini, selama sesi ini. Tidak dapat diubah ke null.
logical_reads bigint Jumlah pembacaan logis yang dilakukan, berdasarkan permintaan dalam sesi ini, selama sesi ini. Tidak dapat diubah ke null.
is_user_process bit 0 jika sesi adalah sesi sistem. Jika tidak, itu adalah 1. Tidak dapat diubah ke null.
text_size int Pengaturan TEXTSIZE untuk sesi. Tidak dapat diubah ke null.
bahasa nvarchar(128) Pengaturan BAHASA untuk sesi. Dapat diubah ke null.
date_format nvarchar(3) Pengaturan DATEFORMAT untuk sesi. Dapat diubah ke null.
date_first smallint Pengaturan DATEFIRST untuk sesi. Tidak dapat diubah ke null.
quoted_identifier bit QUOTED_IDENTIFIER pengaturan untuk sesi. Tidak dapat diubah ke null.
arithabort bit Pengaturan ARITHABORT untuk sesi. Tidak dapat diubah ke null.
ansi_null_dflt_on bit ANSI_NULL_DFLT_ON pengaturan untuk sesi. Tidak dapat diubah ke null.
ansi_defaults bit ANSI_DEFAULTS pengaturan untuk sesi. Tidak dapat diubah ke null.
ansi_warnings bit ANSI_WARNINGS pengaturan untuk sesi. Tidak dapat diubah ke null.
ansi_padding bit ANSI_PADDING pengaturan untuk sesi. Tidak dapat diubah ke null.
ansi_nulls bit ANSI_NULLS pengaturan untuk sesi. Tidak dapat diubah ke null.
concat_null_yields_null bit CONCAT_NULL_YIELDS_NULL pengaturan untuk sesi. Tidak dapat diubah ke null.
transaction_isolation_level smallint Tingkat isolasi transaksi sesi.

0 = Tidak ditentukan

1 = ReadUncommitted

2 = ReadCommitted

3 = RepeatableRead

4 = Dapat diserialisasi

5 = Rekam jepret

Tidak dapat diubah ke null.
lock_timeout int LOCK_TIMEOUT pengaturan untuk sesi. Nilainya dalam milidetik. Tidak dapat diubah ke null.
deadlock_priority int DEADLOCK_PRIORITY pengaturan untuk sesi. Tidak dapat diubah ke null.
row_count bigint Jumlah baris yang dikembalikan pada sesi hingga titik ini. Tidak dapat diubah ke null.
prev_error int ID kesalahan terakhir yang dikembalikan pada sesi. Tidak dapat diubah ke null.
original_security_id varbinary(85) ID keamanan Microsoft Windows yang terkait dengan original_login_name. Tidak dapat diubah ke null.
original_login_name nvarchar(128) 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 bisa saja melalui banyak pengalihan konteks implisit atau eksplisit setelah koneksi awal. Misalnya, jika EXECUTE AS digunakan. Tidak dapat diubah ke null.
last_successful_logon datetime Berlaku untuk: SQL Server 2008 (10.0.x) dan versi yang lebih baru

Waktu masuk terakhir yang berhasil untuk original_login_name sebelum sesi saat ini dimulai.
last_unsuccessful_logon datetime Berlaku untuk: SQL Server 2008 (10.0.x) dan versi yang lebih baru

Waktu upaya masuk terakhir yang gagal untuk original_login_name sebelum sesi saat ini dimulai.
unsuccessful_logons bigint Berlaku untuk: SQL Server 2008 (10.0.x) dan versi yang lebih baru

Jumlah upaya masuk yang tidak berhasil untuk original_login_name antara last_successful_logon dan login_time.
group_id int ID grup beban kerja tempat sesi ini berada. Tidak dapat diubah ke null.
database_id smallint Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru

ID database saat ini untuk setiap sesi.

Di Azure SQL Database, nilainya unik dalam satu database atau kumpulan elastis, tetapi tidak dalam server logis.
authenticating_database_id int Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru

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

Jumlah transaksi terbuka per sesi.
pdw_node_id int Berlaku untuk: Azure Synapse Analytics, Analytics Platform System (PDW)

Pengidentifikasi untuk simpul tempat distribusi ini aktif.
page_server_reads bigint Berlaku untuk: Azure SQL Database Hyperscale

Jumlah pembacaan server halaman yang dilakukan, berdasarkan permintaan dalam sesi ini, selama sesi ini. Tidak dapat diubah ke null.

Izin

Setiap orang dapat melihat informasi sesi mereka sendiri.

SQL Server: Memerlukan VIEW SERVER STATE izin di SQL Server untuk melihat semua sesi di server.

SQL Database: Mengharuskan VIEW DATABASE STATE untuk melihat semua koneksi ke database saat ini. VIEW DATABASE STATE tidak dapat diberikan dalam master database.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.

Keterangan

Saat opsi konfigurasi server yang diaktifkan kepatuhan kriteria umum diaktifkan, statistik masuk ditampilkan di kolom berikut.

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

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

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 akan 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 id_sesi Satu-ke-nol atau satu-ke-banyak
sys.dm_exec_sessions sys.dm_exec_connections id_sesi Satu-ke-nol atau satu-ke-banyak
sys.dm_exec_sessions sys.dm_tran_session_transactions id_sesi 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 id_sesi 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 telah 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;
GO

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;

Langkah berikutnya