了解事件通知与 SQL 跟踪

下表对使用事件通知和 SQL 跟踪监视服务器事件进行比较和对照。

SQL 跟踪

事件通知

SQL 跟踪不会对与事务关联的性能造成负面影响。打包数据很有效。

创建 XML 格式的事件数据和发送事件通知会对性能造成关联的负面影响。

SQL 跟踪可以监视任何跟踪事件类。

事件通知可以监视部分跟踪事件类和所有数据定义语言 (DDL) 事件。

您可以自定义在跟踪事件中生成哪些数据列。

由事件通知返回的 XML 格式的事件数据架构是固定的。

无论是否回滚 DDL 语句,都将始终生成 DDL 生成的跟踪事件。

如果回滚相应 DDL 语句中的事件,则事件通知不会触发。

管理跟踪事件数据的中间流涉及填充和管理跟踪文件或跟踪表。

事件通知数据的中间管理将通过 Service Broker 队列自动执行。

每次重新启动服务器时,都必须重新启动跟踪。

注册之后,事件通知将保持在服务器循环中,并进行事务处理。

启动之后,无法控制触发跟踪。停止时间和筛选时间可用于指定何时启动。可以通过轮询相应的跟踪文件访问跟踪。

通过对接收事件通知生成的消息的队列使用 WAITFOR 语句可以控制事件通知。可以通过轮询队列访问它们。

ALTER TRACE 是创建跟踪所需的最低权限。在相应计算机上创建跟踪文件也需要该权限。

最低权限取决于要创建的事件通知的类型。有关详细信息,请参阅CREATE EVENT NOTIFICATION (Transact-SQL)。相应队列还需要 RECEIVE 权限。

可以远程接收跟踪。

可以远程接收事件通知。

可以使用系统存储过程实现跟踪事件。

通过组合使用数据库引擎和 Service BrokerTransact-SQL 语句实现事件通知。

通过查询相应的跟踪表、分析跟踪文件或使用 SQL Server 管理对象 (SMO) TraceReader 类能够以编程方式访问跟踪事件数据。

可以通过对 XML 格式的事件数据执行 XQuery 或使用 SMO 事件类,以编程方式访问事件数据。