草庐IT

sql-server - Microsoft SQL sys.dm_os_wait_stats 加起来比时间段多毫秒

coder 2024-06-21 原文

这篇文章的重点是最终确定 SQL 服务器机器的 CPU 和 IO 利用率。传统上我们会使用@@cpu_busy、@@io_busy 和@@idle 来确定,但是在 MSSQL 上,它们会在 28 天后停止工作。我们从盒子上的不同来源获得了 CPU 利用率,但我们需要确定 IO 限制。

查看 sys.dm_os_wait_stats 中的数据并每十分钟计算一次增量时,等待的秒数可能超过十分钟。 我也尝试除以等待的任务,但数据仍然没有意义。
基本上,我们希望将每种等待类型都变成十分钟内等待的百分比。但是,如果等待时间超过 10 分钟,则无法简单地将时间除以 10 分钟来查看使用百分比。

我们正在尝试确定一个指标来显示 IO 绑定(bind)框的情况。

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 滴答计数器增量的相关性最高。等待时间与@@io_busy 计数器增量最相关。

根据@@vars,此 SQL 框受 cpu 限制(cpu% 比 io% 高很多),而“根据”等待统计信息,它受 IO 限制。根据 sys.dm_os_ring_buffers ,该框受 CPU 限制。我相信 SystemHealth/SystemIdle 所说的。

这篇文章建议可以使用信号等待时间 vs 等待时间来获得 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: 

最佳答案

在多核机器上,每个 CPU 都有自己的调度器,并且可以注册自己的等待。例如 - 如果您有一个跨多个 CPU 并行运行的查询,则并行查询的每个部分都可以在等待查询完成时注册自己的 CXPACKET 等待。

要获得利用率,只需除以总等待时间,而不是 10 分钟。

SELECT wait_type,
       wait_time_ms * 100.00 / SUM(wait_time_ms) OVER()
FROM sys.dm_os_wait_stats

关于sql-server - Microsoft SQL sys.dm_os_wait_stats 加起来比时间段多毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30389242/

有关sql-server - Microsoft SQL sys.dm_os_wait_stats 加起来比时间段多毫秒的更多相关文章

  1. ruby-on-rails - 如何在 mac os snow leopard 中升级 ruby​​ 和 rails - 2

    我想将我的MacSnowLeopardruby​​从1.8.7升级到1.9.1版本,有人知道轻松且最好的升级方法吗?因为我读了一些论坛/帖子/博客/讨论说覆盖苹果发布的ruby不好将Rails从版本2.2.2升级到2.3.8的最佳方法是什么?因为我找到的所有信息都仅适用于豹/老虎,而且很少有关于雪豹的复杂文章。他们还说覆盖apple提供的rails不好吗。谁能帮帮我?谢谢。 最佳答案 DanBenjamin有一些greatinstructionsforcompilingandinstallingRuby,RubyGemsandRai

  2. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  3. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  4. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  5. ruby - 是否可以在不实际发送或读取数据的情况下查明 ruby​​ 套接字是否处于 ESTABLISHED 或 CLOSE_WAIT 状态? - 2

    s=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)s.connect(Socket.pack_sockaddr_in('port','hostname'))ssl=OpenSSL::SSL::SSLSocket.new(s,sslcert)ssl.connect从这里开始,如果ssl连接和底层套接字仍然是ESTABLISHED,或者它是否在默认值7200之后进入CLOSE_WAIT,我想检查一个线程几秒钟甚至更糟的是在实际上不需要.write()或.read()的情况下关闭。是用select()、IO.select()还是其他方法完成

  6. ruby-on-rails - OS X Mavericks 破坏了 rbenv? - 2

    最近,我安装了OSXMavericks,它似乎弄乱了我的开发环境。我在运行“railsnewfirst_app”后收到此消息:Youruseraccountisn'tallowedtoinstalltothesystemRubygems.Youcancancelthisinstallationandrun:bundleinstall--pathvendor/bundletoinstallthegemsinto./vendor/bundle/,oryoucanenteryourpasswordandinstallthebundledgemstoRubygemsusingsudo.Pass

  7. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

  8. ruby-on-rails - 无法在 OS X Mavericks 中安装 gem 'therubyracer' - 2

    我是mac的新手,尝试bundleinstall一个克隆的railsrepo。我在安装libv8gem时遇到错误,google并找到了解决方案并做了brewinstalllibv8geminstalllibv8----with-system-v8接下来我中了thyreracergem,完整trace如下Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./Users/anand/.rvm/rubies/

  9. ruby-on-rails - gem install rmagick -v 2.13.1 错误 Failed to build gem native extension on Mac OS 10.9.1 - 2

    我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/

  10. sql - 在 Rails Console for PostgreSQL 的表中显示数据 - 2

    我找到了这样的东西:Rails:Howtolistdatabasetables/objectsusingtheRailsconsole?这一行没问题:ActiveRecord::Base.connection.tables并返回所有表但是ActiveRecord::Base.connection.table_structure("users")产生错误:ActiveRecord::Base.connection.table_structure("projects")我认为table_structure不是Postgres方法。如何列出Postgres数据库的Rails控制台中表中的所有

随机推荐