u23*_*534 5 sql-server-2008 sql-server
是CPU (ms/sec)在前面的第二毫秒的CPU时间?如果达到1000,是否意味着它使用了100%的CPU?
但是,在我的 8 核服务器上,% Processor Time当“最近昂贵的查询”中最昂贵的查询达到 1000 时,通常会非常低,例如几个百分点。
swa*_*eck 10
这是该查询每秒使用的 CPU 时间的比率。在此 DMV ( sys.dm_exec_query_stats) 中,SQL Server 内部的CPU 时间以微秒为单位进行测量,并且报告正在提取每秒的使用情况。但是,ms报告中的活动监视器以毫秒为单位,微秒为mcs.
您在此结果集中看到 1000 的原因可能是因为该查询在该一秒间隔内使用了所有 CPU 时间。重申一下,它在那一秒使用了 1000 毫秒的 CPU 时间。在具有多个调度程序 ( sys.dm_os_schedulers)的系统上,可以并行执行查询并使用多个调度程序,并且 CPU 时间超过 1000 毫秒/秒。在下面的示例中,该查询在最后一秒消耗了 SQLOS 调度程序的 500 毫秒 CPU 时间。这意味着 50% 的 CPU 时间专用于此查询。请注意,它可能是一个并行查询,并且仅使用了五个调度程序中的 10%(与 CPU 数量相关)。根据这些并行线程的时间,它可能会在% Processor Time. 在您的性能监视器中,您是否正在查看_Total或每个处理器?此外,您可以运行下面的查询以查看 SQL Server 如何报告其自己的 CPU 利用率(感谢 Glenn Berry)。
DECLARE @ts_now BIGINT;
SELECT @ts_now = cpu_ticks/(cpu_ticks/ms_ticks)FROM sys.dm_os_sys_info;
SELECT TOP(10)
SQLProcessUtilization AS sql_server_process_cpu,
SystemIdle AS system_idle_process_cpu,
100 - SystemIdle - SQLProcessUtilization AS other_process_cpu,
DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS event_time
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 '%<SystemHealth>%') AS x
) AS y
ORDER BY record_id DESC;
Run Code Online (Sandbox Code Playgroud)
请记住,这total_worker_time是自编译计划以来查询使用的 CPU 时间量*。查看报告中Executions/min旁边的右侧CPU (ms/sec),了解此查询计划是否已被多次使用。注意:这可能需要数学。说了所有这些之后,我启动了 Activity Monitor 并查看了在开发实例上显示高 CPU 时间的查询之一。然后我去 DMV 查看该查询的 total_cpu_time 并且这个数字相当高(这是意料之中的)。这让我相信数学是由 Activity Monitor 在内部处理的,并且正在将当前值total_cpu_time与total_cpu_time1 秒前知道的值之间的差异计算出来。
因此,在总结,这是显示你有多少total_cpu_time微秒查询有问题在最后一秒已经习惯了。
我还会记下该查询并查看sys.dm_exec_query_stats该查询计划哈希的结果并查看该 DMV 提供的其他信息。
将鼠标悬停在活动监视器中的 CPU(毫秒/秒)标题上建议查看联机丛书中的 sys.dm_exec_query_stats.total_worker_time。
http://msdn.microsoft.com/en-us/library/ms189741.aspx
这是total_worker_time的定义:
自编译以来执行该计划所消耗的 CPU 时间总量(以微秒为单位)。
根据我的经验,存储在 SQL Server 中的任何每秒性能指标都是累积值。我希望这有帮助。
坦率