SQL Server 监视(Monitoring)体系架构

在SQL Server的日常管理中,让SQL Server高效运行,且性能良好,是DBA需要做的事。DBA需要了解日常的性能运行情况,对性能进行分析和调优,需要对线上环境部署监控。监视(Monitoring)是SQL Server数据库引擎的一大主题,了解整个数据库引擎的监视架构,如何做好全面的监控,是很必要的。笔者结合MSDN的介绍和自己的理解来谈谈监视(Monitoring)和监视事件(Monitoring Events)的体系架构。

 

监视(Monitoring

 

监视(Monitoring)主题包括:

在SQL Server实用工具中监视SQL Server的实例(SQL Server Utility

          描述 SQL Server 实用工具中的监视功能。

日志文件查看器(Log File Viewer

          介绍显示有关 SQL Server 组件的记录信息的方法。

监视资源使用情况(Monitoring Resource Usage

          包含有关使用 Windows 系统监视器跟踪 SQL Server 中的资源使用情况的信息。

监视事件(Monitoring Events

          包含有关使用 SQL Server Profiler 和 SQL 跟踪监视 SQL Server 事件的信息。

数据收集(Data Collection

          包含有关使用 SQL Server 数据收集器来获取和保存从多个源收集的数据的信息。

SQL Server 扩展事件(SQL Server Extended Events

          在 SQL Server 2008 及以后版本中,可以使用扩展事件来排除性能问题。它是一种适用于服务器系统的事件基础结构。扩展事件可更加深入地探查 SQL Server 的内部工作原理,可在复杂的故障排除情况中使用。

 

监视事件(Monitoring Events

 

监视事件(Monitoring Events)主要包括:

SQL 跟踪(SQL Trace

          Microsoft SQL Server 提供 Transact-SQL 系统存储过程来创建对 SQL Server 数据库引擎实例的跟踪。可以不使用 SQL Server Profiler,而使用这些系统存储过程从您自己的应用程序中手动创建跟踪。这使您可以针对企业的特定需要编写自定义应用程序。

SQL Server Profiler

          Microsoft SQL Server Profiler 是 SQL 跟踪的图形用户界面,用于监视 数据库引擎或 Analysis Services 的实例。您可以捕获有关每个事件的数据并将其保存到文件或表中供以后分析。例如,可以对生产环境进行监视,了解哪些存储过程由于执行速度太慢影响了性能。

事件通知(Event Notifications

          介绍可向 Service Broker 发送有关服务器和数据库事件信息的作为特殊类别数据库对象的事件通知。

 

SQL Server 提供 SQL 跟踪(SQL Trace事件通知(Event Notifications来监视数据库引擎中发生的事件。

 

通过记录指定事件,SQL 跟踪可以帮助您解决性能问题、审核数据库活动、收集用于测试环境的示例数据、调试 Transact-SQL 语句和存储过程以及为性能分析工具收集数据。可以通过 SQL Server Profiler(一个图形用户界面)或在命令行输入的 Transact-SQL 系统存储过程访问 SQL 跟踪运行时,SQL 跟踪在数据库引擎中的事件发生时捕获事件。捕获的事件是您选择在某进程中进行监视的事件类实例,此进程称为一个 trace。每个事件类都包括一个事件名称和多个数据列(用于描述特定情况下发生的事件类的属性)。跟踪中指定事件类的某个事件发生时,SQL 跟踪将把事件名称和关联数据记录到跟踪文件中。

 

通常,通过 SQL Server Profiler 访问 SQL 跟踪。还可以使用 Transact-SQL 系统存储过程来访问 SQL 跟踪。SQL Server Profiler 可以使用 SQL 跟踪的全部事件捕获功能并添加跟踪表信息、将跟踪定义保存为模板、提取查询计划和死锁事件作为单独的 XML 文件以及重播跟踪结果以进行诊断和优化的能力。

 

事件通知将有关 SQL 跟踪捕获的许多相同事件的信息发送到 Service Broker 服务。但事件通知与跟踪不同,它可用于在 SQL Server 内响应事件执行操作。由于事件通知异步执行,因此这些操作不占用即时事务定义的任何资源。