Tsql 通过WMI或T-SQL获取总CPU

Tsql 通过WMI或T-SQL获取总CPU,tsql,coldfusion,wmi,cpu-usage,perfmon,Tsql,Coldfusion,Wmi,Cpu Usage,Perfmon,我不想要所有进程的列表,只想要windows taskmanager中显示的总百分比 我将通过coldfusion使用这些信息,但是我在试图找到当前cpu使用的总数时遇到了各种各样的问题 我不在乎它是来自wmi还是t-sql,我只想要一个总数,我将使用它填充一个仪表图,通过ajax显示我当前的cpu使用率百分比 谢谢…如果是我,我会在相关机器上设置一个性能计数器来测量总CPU。可以将其配置为每隔几秒钟写入CSV文件 然后,您可以有一个每分钟将该文件写入数据库的任务,并让CF读取该数据,这样您就可

我不想要所有进程的列表,只想要windows taskmanager中显示的总百分比

我将通过coldfusion使用这些信息,但是我在试图找到当前cpu使用的总数时遇到了各种各样的问题

我不在乎它是来自wmi还是t-sql,我只想要一个总数,我将使用它填充一个仪表图,通过ajax显示我当前的cpu使用率百分比


谢谢…

如果是我,我会在相关机器上设置一个性能计数器来测量总CPU。可以将其配置为每隔几秒钟写入CSV文件

然后,您可以有一个每分钟将该文件写入数据库的任务,并让CF读取该数据,这样您就可以随时间查看图形。或者,如果您需要最新的值,则只需让CF读取CSV文件的最后一个值,并将其用于仪表

就我个人而言,我将所有web服务器的所有数据存储在数据库中,这样我就可以看到一段时间内的性能,并在繁忙或出现问题时运行报告。这对我们很有用


希望有帮助

如果是我,我会在相关机器上设置一个perfmon计数器来测量总CPU。可以将其配置为每隔几秒钟写入CSV文件

然后,您可以有一个每分钟将该文件写入数据库的任务,并让CF读取该数据,这样您就可以随时间查看图形。或者,如果您需要最新的值,则只需让CF读取CSV文件的最后一个值,并将其用于仪表

就我个人而言,我将所有web服务器的所有数据存储在数据库中,这样我就可以看到一段时间内的性能,并在繁忙或出现问题时运行报告。这对我们很有用


希望有帮助

您可以使用WMI类获取此信息。在查询中,您将使用Win32\u PerfFormattedData\u PerfOS\u处理器。名称=“\u总计”。有关使用WMI的更多信息以及本文中的示例vbscirpt代码,请参阅本文

您可以使用WMI类获取此信息。在查询中,您将使用Win32\u PerfFormattedData\u PerfOS\u处理器。名称=“\u总计”。有关使用WMI的更多信息以及本文中的示例vbscirpt代码,请参阅本文

这是其他人的答案,但在T-SQL中,您可以使用:

  DECLARE @ts_now BIGINT
    SELECT @ts_now = cpu_ticks / CONVERT(FLOAT, ms_ticks) FROM sys.dm_os_sys_info

    SELECT top 1 record_id,
            DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS EventTime, 
            SQLProcessUtilization,
            SystemIdle,
            100 - SystemIdle - SQLProcessUtilization AS OtherProcessUtilization,
            100 - SystemIdle AS TotalCPU
    FROM (
            SELECT 
                    record.value('(./Record/@id)[1]', 'int') AS record_id,
                    record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS SystemIdle,
                    record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS SQLProcessUtilization,
                    TIMESTAMP
            FROM (
                    SELECT TIMESTAMP, CONVERT(XML, record) AS record 
                    FROM sys.dm_os_ring_buffers 
                    WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
                    AND record LIKE '% %') AS x
            ) AS y 
    ORDER BY record_id DESC

这是其他人的答案,但在T-SQL中,您可以使用:

  DECLARE @ts_now BIGINT
    SELECT @ts_now = cpu_ticks / CONVERT(FLOAT, ms_ticks) FROM sys.dm_os_sys_info

    SELECT top 1 record_id,
            DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS EventTime, 
            SQLProcessUtilization,
            SystemIdle,
            100 - SystemIdle - SQLProcessUtilization AS OtherProcessUtilization,
            100 - SystemIdle AS TotalCPU
    FROM (
            SELECT 
                    record.value('(./Record/@id)[1]', 'int') AS record_id,
                    record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS SystemIdle,
                    record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS SQLProcessUtilization,
                    TIMESTAMP
            FROM (
                    SELECT TIMESTAMP, CONVERT(XML, record) AS record 
                    FROM sys.dm_os_ring_buffers 
                    WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
                    AND record LIKE '% %') AS x
            ) AS y 
    ORDER BY record_id DESC

与taskmanager类似,我应该使用哪个计数器来获取总cpu使用率?PercentUserTime或PercentPrivaledgedTime等。如果您想要总cpu使用率,则需要PercentProcessorTime和TimeStamp_Sys100NS。第二篇文章中的示例代码展示了如何使用这些值来计算VBscript中的百分比albiet。我从grom TimeSpan_Sys100NS返回的值始终为空或为空。所以这个公式不起作用。在Vista上使用时,我是否需要调整此设置?您的查询是什么样子的?你能用你正在使用的查询更新你的帖子吗?我对cold fusion不是很熟悉,但是你能把查询改为obj_wmi.execQuery Win32_performattedData_PerfOS_Processor.Name=''或从Win32_performattedData_PerfOS_Processor中选择*,其中Name=''u Total'。您也可以尝试在Vista上运行vbscript示例,看看它是否有效。我应该使用哪个计数器来获取cpu的总使用量,类似于taskmanager?PercentUserTime或PercentPrivaledgedTime等。如果您想要总cpu使用率,则需要PercentProcessorTime和TimeStamp_Sys100NS。第二篇文章中的示例代码展示了如何使用这些值来计算VBscript中的百分比albiet。我从grom TimeSpan_Sys100NS返回的值始终为空或为空。所以这个公式不起作用。在Vista上使用时,我是否需要调整此设置?您的查询是什么样子的?你能用你正在使用的查询更新你的帖子吗?我对cold fusion不是很熟悉,但是你能把查询改为obj_wmi.execQuery Win32_performattedData_PerfOS_Processor.Name=''或从Win32_performattedData_PerfOS_Processor中选择*,其中Name=''u Total'。您也可以尝试在Vista上运行vbscript示例,看看它是否有效。这是我通过wmi cfc查询函数查询wmi的方式:这是我通过wmi cfc查询函数查询wmi的方式: