使用SQL平衡环境监视器

时间:2019-06-28 14:56:05

标签: sql sql-server notifications

我正在做一些非常具体的事情,所以我希望其他人对哪种方法可能有效有所了解。

我正在尝试做到这一点,因此每5分钟运行一次的监视脚本不会使每个人收到多余的通知。我正在尝试使用SQL来平衡负载,但是我在努力提出所需的查询。

我已经设置了这张桌子:

Create Table MonitorDetails (
    MonitorID int IDENTITY(1,1) PRIMARY KEY,
    IssueType nvarchar(255) Not Null,
    IssueDetails Nvarchar(max) not null,
    Hostname nvarchar(255),
    Criticality int not null,
    ReportedTime Datetime not null,
    ResolvedTime Datetime,
    NotificationSent bit Default 0
)

所有失败都转储到该表中。

所以这是一个例子:

  • 引发错误
  • 表中记录了错误
  • 5分钟后,由于尚未解决错误,因此再次记录了错误

我正在运行的脚本将查看表中的记录,我希望第一次记录错误时发送通知并设置通知标志,但是如果错误再次出现并且通知已已经发送,它将不会发送其他通知。

查找重复项很容易,但是如何排除其中一个记录已设置通知标记的重复项(或批量更新重复项)?

SELECT
    IssueType, IssueDetails, Hostname, Criticality, ReportedTime, COUNT(*)
FROM
    MonitorDetails
Where ResolvedTime is null
GROUP BY
    IssueType, IssueDetails, Hostname, Criticality, ReportedTime
HAVING 
    COUNT(*) > 1

我可能会考虑这个问题,但是我试图使查询保持轻量级,以免对SQL Server本身造成负担。有人有建议吗?

1 个答案:

答案 0 :(得分:1)

将MAX(NotificationSent)添加到选择列表。如果值为1,则已经发送通知。

如果您只想返回那些未发送通知的消息,请更新HAVING条件:

HAVING COUNT(*) > 1 AND MAX(NotificationSent)=0