我试图通过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
答案 0 :(得分:1)
@@IO_BUSY ...对所有CPU都是累积的,所以可能 超过实际经过时间
@@CPU_BUSY ...对所有CPU都是累积的,所以可能 超过实际经过时间
我建议使用性能计数器,它们更准确。 CPU Process object和各种SQL等待SQL Server, Wait Statistics Object。