我尝试使用cntr_value
instance_name
为两个不同的计数器名称选择_Total
临时表。我无法解决如何做到这一点。
INSERT INTO @RESULTS
(AsOfDate, unsent_log, unrestored_log, instance_name)
select @Now, cntr_value, cntr_value, instance_name
from master.sys.dm_os_performance_counters
where counter_name ='Log Send Queue KB'
--and counter_name = 'Redo Queue KB'
and instance_name = '_Total'
Select * from @results
我的表格如下:
AsOfDate unsent_log unrestored_log instance_name
2014-10-30 11:22:25.290 0 0 _Total
答案 0 :(得分:1)
您需要更改逻辑以使用OR(因为名称是一个值或另一个值),并且由于优先规则将该子句包装在括号中:
INSERT INTO @RESULTS
(AsOfDate, unsent_log, unrestored_log, instance_name)
select @Now, cntr_value, cntr_value, instance_name
from master.sys.dm_os_performance_counters
where (counter_name ='Log Send Queue KB' OR counter_name = 'Redo Queue KB')
and instance_name = '_Total'
或者使用IN,在这种情况下更具可读性:
INSERT INTO @RESULTS
(AsOfDate, unsent_log, unrestored_log, instance_name)
select @Now, cntr_value, cntr_value, instance_name
from master.sys.dm_os_performance_counters
where counter_name IN ('Log Send Queue KB', 'Redo Queue KB')
and instance_name = '_Total'
答案 1 :(得分:0)
下面是使用CROSS APPLY
从2个不同行获取计数器值的示例。
INSERT INTO @RESULTS
( AsOfDate
, unsent_log
, unrestored_log
, instance_name
)
SELECT SYSDATETIME() AS AsOfDate
, a.cntr_value AS unsent_log
, b.cntr_value AS unrestored_log
, instance_name
FROM master.sys.dm_os_performance_counters AS a
CROSS APPLY ( SELECT cntr_value
FROM master.sys.dm_os_performance_counters
AS b
WHERE b.counter_name = 'Log Send Queue KB'
AND b.instance_name = '_Total'
) AS b
WHERE a.counter_name = 'Redo Queue KB'
AND a.instance_name = '_Total';
答案 2 :(得分:0)
我花了一段时间才明白你要去哪里。试图理解@ DanGuzman的回答让我走上了正轨,但我认为他的答案太复杂了,无法满足这里的需要。
我只是去找:
INSERT INTO @RESULTS (AsOfDate, unsent_log, unrestored_log, instance_name)
SELECT @Now,
unsent_log = SUM(CASE WHEN counter_name = 'Log Send Queue KB' THEN cntr_value ELSE 0 END),
unrestored_log = SUM(CASE WHEN counter_name = 'Redo Queue KB' THEN cntr_value ELSE 0 END),
instance_name
FROM master.sys.dm_os_performance_counters
WHERE counter_name IN ('Log Send Queue KB', 'Redo Queue KB')
AND instance_name = '_Total'
GROUP BY instance_name
这是(恕我直言)更易读,更容易扩展/维护,并且结果也更轻量级(根据查询计划)。