从 SQL Server 检查后台进程
Posted
技术标签:
【中文标题】从 SQL Server 检查后台进程【英文标题】:Check background process from SQL Server 【发布时间】:2015-02-13 05:33:04 【问题描述】:我有一个后台进程正在运行,它可以在运行时在任务管理器中看到。我需要从我的数据库中检查进程是否正在运行 我尝试了以下查询
select * from sys.dm_os_threads
select * FROM sys.dm_os_tasks
但它并没有显示系统上运行的所有进程
【问题讨论】:
这会有帮助吗?SELECT * FROM sys.dm_exec_sessions WHERE is_user_process = 1
感谢您的回复,但这不是我需要的..,这仅提供与 SQL Managenent Studio 相关的过程。我需要的是,需要看到我们在任务管理器中看到的所有进程。
也可以用另一种方式检查,后台应用程序使用本地主机端口。如果从sql有什么方法可以查到端口是否被占用,也很有用。
我认为你的做法是错误的。您为什么使用 SQL Server 作为其他服务的监控工具?
这些视图将只为您提供与 mssql 线程和进程相关的信息,而不是为您在任务管理器下可见的所有进程/任务提供信息。启动时,SQL Server 启动线程,然后将工作线程与这些线程相关联。但是,扩展存储过程等外部组件可以在 SQL Server 进程下启动线程。 SQL Server 无法控制这些线程。 sys.dm_os_threads 可以提供有关在 SQL Server 进程中消耗资源的流氓线程的信息。
【参考方案1】:
我有一个后台进程正在运行,它可以在运行时在任务管理器中看到。我需要从我的数据库中检查进程是否正在运行
我希望您谈论的是后台 SQL Server 进程。以下查询仅显示与 SQL Server 相关的信息
查询DMV可以看到SQL server上运行的所有进程
select * from sys.dm_exec_requests
select * from sys.dm_exec_sessions
select * from sys.dm_exec_connections
您可以在线阅读有关这些 DMV 文档的书籍
【讨论】:
不,我不是在询问后台 SQL 服务器进程。假设您打开了一个 Excel 文档,然后在 windows 的任务管理器中,您将能够看到 Excel.exe。我需要从 SQL 查询并检查当前是否有任何 Excel 文档保持打开状态 您可以将后台服务视为一个独立的ADO应用程序。我正在从数据库中检查它,以便将其写入日志文件。 如果您不是在寻找 SQL Server 服务,为什么要使用 SQL Server 标签发布?。另外,如果您想看到更多任务管理器显示的内容,您可以使用 Procmon 来查看内部情况,尽管我不确定它对您有多大帮助【参考方案2】:use this query
select
tblSysProcess.cmd
, tblSysProcess.physical_io IOUsage
, tblSysProcess.cpu as CPUusage
, tblSysProcess.waittype as waitType
, tblSysProcess.waittime as waitTime
, tblSysProcess.lastwaittype as lastWaitType
, tblSysProcess.waitResource as waitResource
, tblSysProcess.dbid as databaseID
, case
when (dbid > 0) then db_name(dbid)
else ''
end as dbName
, memusage as memUsage
, status
from master.dbo.sysprocesses tblSysProcess
where
(
--background process
(tblSysProcess.spid < 50)
)
【讨论】:
【参考方案3】:select db_name(dbid),cmd,spid,status
from
sys.sysprocesses
where
db_name(dbid) = 'dbname' and status = 'background'
【讨论】:
【参考方案4】:所以看起来您不是在尝试查看 SQL 服务器进程,而是在机器上为另一个应用程序查看另一个进程,没有任何内置 DMV 或函数能够以本机方式向您显示此信息。你有两个选择,一个是编写一个 CLR 存储过程或函数来检查进程,另一个是使用 xp_cmdshell 来获取任务列表,你可以这样做:
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO
EXEC xp_cmdshell 'tasklist.exe'
GO
EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE
这将列出机器上所有正在运行的进程,如果需要,您可以将这些数据推入表格中以进行进一步分析,或者您可以使用 tasklist.exe 参数来查找您的进程有兴趣。只要记住在不需要时关闭 xp_cmdshell,因为它可能存在安全风险。
【讨论】:
【参考方案5】:试试这个;
EXEC sp_who1
EXEC sp_who2
SELECT *
FROM MASTER..sysprocesses
SELECT *
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
【讨论】:
@sergio 这也没有给出任务管理器中显示的进程。 Imran sysprocesses 不再被 MS 推荐使用。相反,我们必须使用 sys.sm_exec_requests以上是关于从 SQL Server 检查后台进程的主要内容,如果未能解决你的问题,请参考以下文章