这篇文章的目的是最终确定SQL服务器盒的CPU和IO利用率。传统上我们使用@@ cpu_busy,@@ io_busy和@@ idle来确定在MSSQL上,那些在28天之后退出的工作。我们从盒子上的不同来源获得CPU利用率,但我们需要确定IO限制。
查看sys.dm_os_wait_stats中的数据并每十分钟计算一次增量时,等待秒数可超过十分钟。 我也尝试将等待的任务分开,但数据仍然没有意义 基本上,我们希望将每种等待类型转换为等待十分钟时间的百分比。但如果等待的时间超过十分钟,则不能简单地将时间除以10分钟,以查看所用的百分比。
我们正在尝试确定一个指标,以显示IO绑定框的方式。
https://msdn.microsoft.com/en-us/library/ms179984.aspx
wait_type =等待类型的名称。有关详细信息,请参阅本主题后面的等待类型。
waiting_tasks_count =此等待类型的等待数。此计数器在每次等待开始时递增。
wait_time_ms =此等待类型的总等待时间(以毫秒为单位)。
修改
第一个答案是在正确的轨道上,但不完全正确。该统计信息显示的是,对于给定的时间间隔,可归因于任何一种特定等待类型的等待的百分比。请参见下图。
修改
基于超过10分钟间隔的增量的相关矩阵:
wait_time_ms wait.NO.signal signal_wait_time @@io_busy @@cpu_busy ioPct cpuPct wait_time_ms 100 100 70 74 58 71 58 wait.NO.signal 100 100 64 72 53 69 53 signal_wait_time 70 64 100 71 89 67 89 @@io_busy 74 72 71 100 77 99 77 @@cpu_busy 58 53 89 77 100 75 100 ioPct 71 69 67 99 75 100 75 cpuPct 58 53 89 77 100 75 100
在上图中,可以看到信号时间与@@ cpu_busy tick counter deltas的相关性最高。等待时间与@@ io_busy计数器增量最相关。
根据@@ vars,这个SQL框是cpu绑定的(cpu%比io%高很多)而“等于”等待统计数据,它是IO绑定的。根据sys.dm_os_ring_buffers,该框是CPU绑定的。我相信SystemHealth / SystemIdle说的是什么。
本文建议可以使用信号等待时间与等待时间来获得CPU压力%。但是,与@@ cpu_busy数据相比,我强烈怀疑他的结论只是部分正确。如果他的cpuPressure%很高,那么增加CPU功率会有所帮助,但这不是全部。 http://blogs.msdn.com/b/sqlcat/archive/2005/09/05/461199.aspx
wait_time_ms cpuPress wait.NO.signal signal_wait_time @@io_busy @@cpu_busy ioPct cpuPct cpuPress -50 100 -56 25 -11 25 -11 25
修改
以下适用于所选框之一,但是考虑到不同的核心,我们必须将其考虑在内。
summary(m) Call: lm(formula = ioPct ~ cpuPct + signal_wait_time + wait_time_ms, data = rd) Residuals: Min 1Q Median 3Q Max -3.13921 -0.75004 -0.07748 0.60897 2.14655 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.442311370934 0.085652949324 -5.164 0.000000286383 xxx cpuPct 0.123717691895 0.004503995334 27.468 less 2e-16 xxx signal_wait_time -0.000000302969 0.000000046933 -6.455 0.000000000161 xxx wait_time_ms 0.000000022240 0.000000002534 8.777 less 2e-16 xxx --- Signif. codes: 0 ‘xxx’ 0.001 ‘xx’ 0.01 ‘x’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.9959 on 1109 degrees of freedom Multiple R-squared: 0.7566, Adjusted R-squared: 0.7559 F-statistic: 1149 on 3 and 1109 DF, p-value:
答案 0 :(得分:1)
在多核机器上,每个CPU都有自己的调度程序,并且可以注册自己的等待。例如 - 如果您有一个跨多个CPU并行运行的查询,并行查询的每个部分都可以在等待查询完成时注册自己的CXPACKET等待。
要获得你的百分比,只需除以你的总等待时间,而不是10分钟。
SELECT wait_type,
wait_time_ms * 100.00 / SUM(wait_time_ms) OVER()
FROM sys.dm_os_wait_stats
答案 1 :(得分:1)
等待统计信息由 worker (即线程)注册。如果在一秒钟内,10个线程暂停(每个)0.9秒并执行0.1秒,则总共有10x0.9等待时间(即9秒)和10x0.1总CPU时间(经过1秒)。 100%cpu 和高等待时间(无论等待什么)。
高信号等待时间表示CPU争用。在线程有机会运行之前,线程需要在等待信号之后等待更长的时间。