Sql-Server

Cpu% 使用警報不適用於“如果 counter=raises above 則發出警報”

  • August 14, 2018

我正在考慮在超過某個值時為 Cpu 使用情況創建警報。所以我為此配置了一個警報,並在此處附上了這些螢幕截圖 在此處輸入圖像描述

在此處輸入圖像描述

但上述警報不起作用郵件在超過 50% 時不會觸發。我配置有什麼錯誤嗎?同樣的事情我用 Alert 測試過,如果 counter=‘falls below’ 然後郵件被觸發並且它工作得很好。請幫助我解決我想改變的任何事情。

如果我啟用將所有連接分類到預設資源調控器組的虛擬資源調控器分類器功能,我只能讓 SQL Server 2012 根據“工作負載組統計資訊 - > CPU 使用率%”觸發警報。

我使用了以下分類器函式,以及相關的程式碼來啟用該函式:

USE master;
GO
CREATE FUNCTION dbo.fnDummyClassifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
   RETURN N'default'; --every session is assigned to the "default" pool.
END
GO
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = [dbo].[fnDummyClassifier]);
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO

我使用此程式碼創建了一個警報,每當 CPU 使用率超過 10% 時都會發出警報:

EXEC msdb.dbo.sp_add_alert @name=N'CPUUsage' 
       , @enabled=1
       , @delay_between_responses=0
       , @include_event_description_in=1
       , @performance_condition=N'Workload Group Stats|CPU usage %|default|>|0.1'
       , @job_id=N'00000000-0000-0000-0000-000000000000';
GO

EXEC msdb.dbo.sp_add_notification @alert_name=N'CPUUsage'
   , @operator_name=N'Max'
   , @notification_method = 1;
GO

然後,在啟用分類器功能並重新配置資源調控器後,我使用此查詢強制連接到 SQL Server 的會話中的 CPU 使用率:

SELECT CRYPT_GEN_RANDOM(10)
FROM (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) v1(num)
   CROSS JOIN (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) v2(num)
   CROSS JOIN (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) v3(num)
   CROSS JOIN (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) v4(num)
   CROSS JOIN (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) v5(num)
   CROSS JOIN (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) v6(num)
   CROSS JOIN (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) v7(num)

此查詢顯示警報的狀態,以及上次觸發的時間:

SELECT AlertName = sa.name
   , Enabled = sa.enabled
   , LastOccurrence = CASE WHEN sa.last_occurrence_date > 0 
       THEN dbo.agent_datetime(sa.last_occurrence_date, sa.last_occurrence_time) 
       ELSE NULL 
       END
   , OccurrenceCount = sa.occurrence_count
   , PerformanceCondition = sa.performance_condition
FROM dbo.sysalerts sa
WHERE sa.name = 'CPUUsage';

引用自:https://dba.stackexchange.com/questions/181954