如何使用@@ IO_BUSY找出SQL服务器与IO的繁忙程度

时间:2009-11-17 17:09:12

标签: sql sql-server

我试图通过T-SQL查询找出我的sql 2000服务器在CPU和IO方面的繁忙程度。

目前我正在使用以下内容查找CPU使用率%:

  DECLARE
  @CPU_BUSY int
  , @IDLE int

  SELECT
  @CPU_BUSY = @@CPU_BUSY
  , @IDLE = @@IDLE

  WAITFOR DELAY '00:00:00:500'

  SELECT
  (@@CPU_BUSY - @CPU_BUSY)/((@@IDLE - @IDLE + @@CPU_BUSY - @CPU_BUSY) *
  1.00) *100 AS CPUBusyPct 

然而,当我尝试使用类似的方法来查找IO时,当我知道服务器处于负载状态时,我会得到非常低的IO数据:       宣布       @IO_BUSY int       ,@ IDLE int

  SELECT
  @IO_BUSY = @@IO_BUSY
  , @IDLE = @@IDLE

  WAITFOR DELAY '00:00:00:500'

  SELECT
  (@@IO_BUSY - @IO_BUSY)/((@@IDLE - @IDLE + @@IO_BUSY - @IO_BUSY) *
  1.00) *100 AS IOBusyPct

这些方法是否正确,以合理估计500毫秒时间段内的服务器负载水平?

有更好的建议吗?

我已经尝试了sp_monitor,但是每1秒调用一次会产生奇怪的结果,%会超过100

1 个答案:

答案 0 :(得分:1)

  

@@IO_BUSY ...对所有CPU都是累积的,所以可能   超过实际经过时间

     

@@CPU_BUSY ...对所有CPU都是累积的,所以可能   超过实际经过时间

我建议使用性能计数器,它们更准确。 CPU Process object和各种SQL等待SQL Server, Wait Statistics Object