在SQL中有時候我們需要查看現在正在SQL Server執行的命令。在分析管理器或者Microsoft SQL Server Management Studio中,我們可以在"管理-SQL Server日志-活動監視器"中查看。今天我們主要利用master..sysprocesses系統表來查看。
先看看sysprocesses系統表的相關信息。
sysprocesses:存放有關在 Microsoft SQL Server 實例中運行的進程的信息,這些進程可以是客戶端進程或系統進程。
查詢示例:
select * from master..sysprocesses
我們看看查詢出來的列的含義。
因為該系統表的列數比較多,我們只講解比較有用的列含義。
spid--SQL Server進程的ID。
kpid--Microsoft Windows線程的ID。
dbid--當前正由進程使用的數據庫ID。
uid--執行命令的用戶ID。如果用戶數和角色數超過 32,767,則會溢出或返回 NULL。
cpu--進程的累計占用CPU的時間。
physical_io--進程的累計磁盤讀取和寫入。
memusage--當前分配給該進程的過程緩存中的頁數。一個負數,表示進程正在釋放由另一個進程分配的內存。
login_time--客戶端進程登錄到服務器的時間。對於系統進程,將存儲 SQL Server的啟動時間。
last_batch--客戶端進程上次執行遠程存儲過程調用或EXECUTE語句的時間。對於系統進程,將存儲 SQL Server 的啟動時間。
open_tran--進程的打開事務數。
status--進程ID的狀態。例如,運行或者睡眠。
sid--用戶的全局唯一標識符 (GUID)。
nt_username--進程的 Windows 用戶名(如果使用 Windows 身份驗證)或可信連接的 Windows 用戶名。
loginame 執行該進程的登錄名。
kpid--Microsoft Windows線程的ID。
dbid--當前正由進程使用的數據庫ID。
uid--執行命令的用戶ID。如果用戶數和角色數超過 32,767,則會溢出或返回 NULL。
cpu--進程的累計占用CPU的時間。
physical_io--進程的累計磁盤讀取和寫入。
memusage--當前分配給該進程的過程緩存中的頁數。一個負數,表示進程正在釋放由另一個進程分配的內存。
login_time--客戶端進程登錄到服務器的時間。對於系統進程,將存儲 SQL Server的啟動時間。
last_batch--客戶端進程上次執行遠程存儲過程調用或EXECUTE語句的時間。對於系統進程,將存儲 SQL Server 的啟動時間。
open_tran--進程的打開事務數。
status--進程ID的狀態。例如,運行或者睡眠。
sid--用戶的全局唯一標識符 (GUID)。
nt_username--進程的 Windows 用戶名(如果使用 Windows 身份驗證)或可信連接的 Windows 用戶名。
loginame 執行該進程的登錄名。
這樣,我們就可以查到所有執行命令的進程ID了,如果要查看該進程的具體的SQL語句,可以利用以下語句查看:
dbcc inputbuffer(進程號)
例如:
dbcc inputbuffer(56)
如果我們要終止(殺死)該進程,可利用以下語句:
kill 進程號
例如:
kill 70
