在SQL Server中监视长时间运行的查询的最佳方法是什么?


10

我必须为数据库运行一些长期运行的查询(重建索引,更新大量数据)。除了在SQL Server Management Studio中运行查询并每小时大约检查一次之外,还有其他方法吗?完成后,我想通过电子邮件发送或向其发送消息,但不知道最好的工具。

Answers:


4

Gaius的后续文章:您可以创建一个.SQL脚本,该脚本可以在脚本之前使用db来完成所需的工作->创建一个操作系统类型的SQL Agent作业,该脚本将调用该脚本:

sqlcmd -E -S服务器名称-i“ c:\ YOURSCRIPT.sql” -o“ C:\ YOURSCRIPT_LOG.log”

添加新步骤,并使用msdb.dbo.sp_send_dbmail过程发送电子邮件。可以自定义此功能,以在邮件中显示来自SQL表的特定查询,以确认脚本的执行...例如,重建索引的dbcc showcontig。


1

您可以选择使用SQL作业吗?您可以通过那里进行通知等操作。至于获得间歇性通知,这将需要存储过程中的一些代码等。


1

是的,只需使用xp_sendmail即可。您可以轻松发送预设消息或SQL语句的结果。此功能自SQL Server 6.5起已可用,但是由于在Denali中已作废-如果这将是您操作的永久组成部分,则应使用“企业”更多的数据库邮件


1

我总是将消息写入“ EventLog”表。在处理大量数据时,我按块管理数据,并在每个块之后将状态更新写入EventLog。

当我想检查长时间运行的进程时,只需查询EventLog表。

输出示例:

-------------------
-我的大更新-
-------------------
开始时间:2011-05-03 10:00:00

处理记录:1,000,000
块数:200

-大块1 ---
尝试更新MyTable
记录更新:5000
剩余记录:995,000
吞吐量:每秒4210条记录

-大块2-
尝试更新MyTable
记录更新:5000
剩余记录:990,000
吞吐量:每秒3555条记录

-大块3-
等等

我在EventLog表中也有一些列,以跟踪消息的编写时间,消息的写入过程等,等等。抱歉,在我的示例中未包含该信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.