sys.dm_exec_sessions (Transact-SQL)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure Synapse Analytics Analytics
Platform System (PDW)
Mengembalikan satu baris per sesi terautentikasi pada 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.
Peta sys.dm_exec_connectionstampilan manajemen dinamis , sys.dm_exec_sessions, dan sys.dm_exec_requests 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, gunakan sys.dm_exec_sessions.
| 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) | MICROSOFT Windows ID keamanan yang terkait dengan login. Tidak dapat diubah ke null. |
| login_name | nvarchar(128) | SQL Server nama masuk tempat sesi sedang dijalankan. Untuk nama login asli yang membuat sesi, lihat original_login_name. Dapat berupa nama masuk SQL Server diautentikasi atau nama pengguna domain yang diautentikasi Windows. Tidak dapat diubah ke null. |
| nt_domain | nvarchar(128) | Berlaku untuk: SQL Server 2008 dan yang lebih baru. Windows domain untuk klien jika sesi menggunakan Autentikasi Windows atau koneksi tepercaya. Nilai ini NULL untuk sesi internal dan pengguna non-domain. Dapat diubah ke null. |
| nt_user_name | nvarchar(128) | Berlaku untuk: SQL Server 2008 dan yang lebih baru. Windows nama pengguna untuk klien jika sesi menggunakan Autentikasi Windows atau koneksi tepercaya. Nilai ini NULL untuk sesi internal dan pengguna non-domain. Dapat diubah ke null. |
| status | nvarchar(30) | Status sesi. Nilai yang memungkinkan: Berjalan - Saat ini menjalankan satu atau beberapa permintaan Tidur - Saat ini tidak menjalankan permintaan Tidak aktif - 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, yang 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 saat ini dijalankan. Tidak dapat diubah ke null. |
| last_request_end_time | datetime | Waktu penyelesaian terakhir permintaan 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 telah dilakukan pada sesi. 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 diserialisasikan 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) | SQL Server nama masuk yang digunakan klien untuk membuat sesi ini. Dapat berupa nama masuk terautentikasi SQL Server, nama pengguna domain terautentikasi Windows, atau pengguna database mandiri. Perhatikan bahwa sesi dapat melalui banyak peralihan 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 dan 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 dan 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 dan yang lebih baru. Jumlah upaya masuk yang gagal 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 yang lebih baru. ID database saat ini untuk setiap sesi. |
| authenticating_database_id | int | Berlaku untuk: SQL Server 2012 (11.x) dan 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 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
Semua orang dapat melihat informasi sesi mereka sendiri.
SQL Server: Memerlukan VIEW SERVER STATE izin pada SQL Server untuk melihat semua sesi di server.
SQL Database: Perlu VIEW DATABASE STATE melihat semua koneksi ke database saat ini. VIEW DATABASE STATE tidak dapat diberikan dalam master database.
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 dengan kepatuhan kriteria umum yang diaktifkan.
Koneksi admin pada Azure SQL Database akan melihat satu baris per sesi terautentikasi. Sesi "sa" yang muncul di resultset, tidak berdampak pada kuota pengguna untuk sesi. Koneksi non-admin hanya akan melihat informasi yang terkait dengan sesi pengguna database mereka.
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
A. 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 jangka waktu tertentu, 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
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 menganggur yang memiliki transaksi terbuka
Contoh berikut menemukan sesi yang memiliki transaksi terbuka dan menganggur. Sesi menganggur 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
Kueri umum untuk 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
JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE c.session_id = @@SPID;
Lihat juga
Tampilan dan Fungsi Manajemen Dinamis (SQL Transact)
Tampilan dan Fungsi Manajemen Dinamis Terkait Eksekusi (transact-SQL)