sp_who (T-SQL)

Berlaku untuk:SQL Server

Menyediakan informasi tentang pengguna, sesi, dan proses saat ini dalam instans Mesin Database SQL Server. Informasi dapat difilter untuk mengembalikan hanya proses yang tidak menganggur, yang termasuk dalam pengguna tertentu, atau milik sesi tertentu.

Konvensi sintaks transact-SQL

Sintaks

sp_who [ [ @loginame = ] { 'login' | *session_id* | 'ACTIVE' } ]
[ ; ]

Argumen

[ @loginame = ] { 'login' | session_id | 'ACTIVE' }

Digunakan untuk memfilter tataan hasil.

  • login adalah sysname yang mengidentifikasi proses milik login tertentu.

  • session_id adalah nomor identifikasi sesi milik instans SQL Server. session_id kecil.

  • ACTIVE mengecualikan sesi yang menunggu perintah berikutnya dari pengguna.

Jika tidak ada nilai yang disediakan, prosedur melaporkan semua sesi milik instans.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Tataan hasil

sp_who mengembalikan tataan hasil dengan informasi berikut.

Kolom Jenis data Deskripsi
spid smallint ID Sesi.
ecid smallint ID konteks eksekusi dari utas tertentu yang terkait dengan ID sesi tertentu.

ECID = { 0, 1, 2, 3, ...n }, di mana 0 selalu mewakili utas utama atau induk, dan { 1, 2, 3, ...n } mewakili subthreads.
status nchar(30) Status proses. Nilai yang mungkin adalah:

- dormant. SQL Server sedang mengatur ulang sesi.

- running. Sesi ini menjalankan satu atau beberapa batch. Saat Beberapa Set Hasil Aktif (MARS) diaktifkan, sesi dapat menjalankan beberapa batch. Untuk informasi selengkapnya, lihat Menggunakan Beberapa Kumpulan Hasil Aktif (MARS).

- background. Sesi menjalankan tugas latar belakang, seperti deteksi kebuntuan.

- rollback. Sesi memiliki pembatalan transaksi dalam proses.

- pending. Sesi sedang menunggu utas pekerja tersedia.

- runnable. Tugas sesi berada dalam antrean penjadwal yang dapat dijalankan sambil menunggu untuk mendapatkan kuantum waktu.

- spinloop. Tugas sesi sedang menunggu spinlock menjadi bebas.

- suspended. Sesi sedang menunggu acara, seperti I/O, selesai.
loginame nchar(128) Nama login yang terkait dengan proses tertentu.
hostname nchar(128) Nama host atau komputer untuk setiap proses.
blk karakter(5) ID Sesi untuk proses pemblokiran, jika ada. Jika tidak, kolom ini adalah 0.

Ketika transaksi yang terkait dengan ID sesi tertentu diblokir oleh transaksi terdistribusi tanpa intim, kolom ini mengembalikan -2 untuk pemblokiran transaksi yatim piatu.
dbname nchar(128) Database yang digunakan oleh proses.
cmd nchar(16) Perintah Mesin Database (pernyataan Transact-SQL, proses Mesin Database internal, dan sebagainya) yang dijalankan untuk proses tersebut. Di SQL Server 2019 (15.x) dan versi yang lebih baru, jenis datanya adalah nchar(26).
request_id int ID untuk permintaan yang berjalan dalam sesi tertentu.

Dengan pemrosesan paralel, subthread dibuat untuk ID sesi tertentu. Utas utama ditunjukkan sebagai spid = <xxx> dan ecid = 0. Subthread lainnya memiliki yang sama spid = <xxx>, tetapi dengan ecid > 0.

Keterangan

Proses pemblokiran, yang mungkin memiliki kunci eksklusif, adalah salah satu yang menyimpan sumber daya yang dibutuhkan proses lain.

Semua transaksi terdistribusi tanpa intim diberi nilai ID sesi dari -2. Transaksi terdistribusi tanpa intim adalah transaksi terdistribusi yang tidak terkait dengan ID sesi apa pun. Untuk informasi selengkapnya, lihat Menggunakan Transaksi Yang Ditandai untuk Memulihkan Database Terkait Secara Konsisten (Model Pemulihan Penuh).

is_user_process Kueri kolom sys.dm_exec_sessions untuk memisahkan proses sistem dari proses pengguna.

Izin

Memerlukan izin TAMPILKAN STATUS SERVER di server untuk melihat semua sesi eksekusi pada instans SQL Server. Jika tidak, pengguna hanya melihat sesi saat ini.

Contoh

J. Mencantumkan semua proses saat ini

Contoh berikut menggunakan sp_who tanpa parameter untuk melaporkan semua pengguna saat ini.

USE master;
GO
EXEC sp_who;
GO

B. Mencantumkan proses pengguna tertentu

Contoh berikut menunjukkan cara melihat informasi tentang satu pengguna saat ini dengan nama masuk.

USE master;
GO
EXEC sp_who 'janetl';
GO

C. Menampilkan semua proses aktif

USE master;
GO
EXEC sp_who 'active';
GO

D. Menampilkan proses tertentu yang diidentifikasi oleh ID sesi

USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO