2012-07-10 64 views
0

我想创建一个运行查询的SQL作业,如果它接管了一段时间以发送电子邮件警报。任何想法如何做到这一点。我正在运行SQL Server 2008.SQL服务器上运行缓慢的查询的警报

+0

看起来像一个重复。 http://stackoverflow.com/questions/577233/sql-alert-when-stored-procedure-executes-for-too-to – 2012-07-10 04:18:07

+0

@Paul你想试用一个特定的查询,或者你想找* * any * slow运行查询? – 2012-07-10 05:00:06

+0

我想在特定的查询上使用它 – Paul 2012-07-10 05:48:04

回答

0

您可以安装Nagios并编写一个测试来检查查询的运行时间,如果测试失败 - 向您发送电子邮件。我们用来做同样的对我公司,现在我们正在使用一种名为Event247

+0

我正在寻找我可以在SQL服务器上做的事情。 – Paul 2012-07-10 06:03:18

+0

根据上面发布的链接@sam yi,没有内置MySql服务器的解决方案。但是,如果您不想使用外部工具,则不应该很难采用该链接上发布的某个过程,并创建一个按计划运行的php代码(或者只是在无限循环中运行并“休息“几分钟之间),这将称之为”检查“ - 程序,并会在必要时通过电子邮件发送给您。 – alfasin 2012-07-10 06:31:48

2

要衡量特定查询的运行时间另一个(昂贵的)工具,你可以简单地工作本身内捕捉到它,然后要么引发一个事件触发代理故障警报或发送使用dbmail电子邮件自己在T-SQL:

declare @Elapsed int, 
     @Start datetime = getdate(); 

--your query 
waitfor delay '00:00:03' 
-- 

select @Elapsed = datediff(ss, @Start, getdate()); 

raiserror('Query ran for %d sec(s)', 10, 1, @Elapsed) with nowait; 

这种方法的缺点是你必须真正完成测量运行查询。

+0

这正是使用Nagios的好处 - 您不必等待查询返回! – alfasin 2012-07-10 07:15:39

+0

或者你可以有2个工作。一开始另一个工作有一个'等待延迟'00:00:03''然后检查另一个工作是否正在运行,如果这样会杀死它(可选)并发送警报。不知道服务代理是否也有某种超时。 – 2012-07-10 07:58:08